考虑一组数字:
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])
Run Code Online (Sandbox Code Playgroud)
现在,我想这组变换成另一组y以下列方式:每个元素i中x,相应的元素j在y将其他元素的数量在x这不到i.例如,上面给出的内容x如下:
In [25]: y
Out[25]: array([ 6., 2., 8., 1., 0., 3., 7., 5., 4., 9.])
Run Code Online (Sandbox Code Playgroud)
现在,我可以使用简单的python循环来做到这一点:
In [16]: for i in range(len(x)):
...: tot = 0
...: for j in …Run Code Online (Sandbox Code Playgroud) 我有一个平面数组b:
a = numpy.array([0, 1, 1, 2, 3, 1, 2])
Run Code Online (Sandbox Code Playgroud)
以及c标记每个“块”开始的索引数组:
b = numpy.array([0, 4])
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用归约找到每个“块”中的最大值:
m = numpy.maximum.reduceat(a,b)
>>> array([2, 3], dtype=int32)
Run Code Online (Sandbox Code Playgroud)
但是...有没有一种方法可以通过向量化操作(无列表、循环)找到<edit>块内最大值的索引</edit>(例如)?numpy.argmax