考虑一组数字:
In [8]: import numpy as np
In [9]: x = np.array([np.random.random() for i in range(10)])
In [10]: x
Out[10]:
array([ 0.62594394, 0.03255799, 0.7768568 , 0.03050498, 0.01951657,
0.04767246, 0.68038553, 0.60036203, 0.3617409 , 0.80294355])
现在,我想这组变换成另一组y以下列方式:每个元素i在x,相应的元素j在y会中的其他元素的数量x,其小于i。例如,上面给出的x看起来像:
In [25]: y
Out[25]: array([ 6., 2., 8., 1., 0., 3., 7., 5., 4., 9.])
现在,我可以使用简单的python循环来做到这一点:
In [16]: for i in range(len(x)):
...: tot = 0
...: for j in range(len(x)):
...: if x[i] > x[j]: tot += 1
...: y[i] = int(tot)
但是,当的长度x很大时,代码将变得非常慢。我想知道是否有任何麻木的魔法可以救出。例如,如果我必须过滤小于的所有元素0.5,我将只使用布尔掩码:
In [19]: z = x[x < 0.5]
In [20]: z
Out[20]: array([ 0.03255799, 0.03050498, 0.01951657, 0.04767246, 0.3617409 ])
可以使用类似的方法来使相同的事情更快地实现吗?
慕雪6442864
相关分类