给定一个数组A
和一个十进制数X
,我想知道X
在A
中的秩,直接的方法是在初始数组中添加一个新的数字,在其上运行rankdata
,并选择最后一个元素,如下所示:
import numpy as np
from scipy.stats import rankdata
A = np.array([33.25, 40.16, 18.22, 96.34, 71.15, 48.12, 52.41, 83.11, 12.22])
X = 54.17
B = np.append(A, X)
ranks = rankdata(-B) # reverse an array so that the largest value will have rank 1
rank = int(ranks[-1])
即使它产生了正确的结果,为了经常在大型数组上运行它,在不对整个数组排序的情况下获得它也会很有用。
考虑到这一点,我想知道是否有一个numpy
或scipy
的习惯用法做得更快。
2条答案
按热度按时间mutmk8jj1#
在将值追加到新数组之前(甚至不追加),可以使用与X比较的np.sum。
使用与您要查找的排名顺序相对应的比较:
gg58donl2#
由于你想“经常且在大数组中”确定新项的排序,你需要一个排序列表。因此,你最好把新项保存在一个排序数据结构中。一些复杂度最高的数据结构(O(n log(n)))是B树和堆。