【发布时间】:2017-06-09 13:54:42
【问题描述】:
我有一个平面数组b:
a = numpy.array([0, 1, 1, 2, 3, 1, 2])
还有一个索引数组c 标记每个“块”的开始:
b = numpy.array([0, 4])
我知道我可以通过减少找到每个“块”中的最大值:
m = numpy.maximum.reduceat(a,b)
>>> array([2, 3], dtype=int32)
但是...有没有办法在一个块</edit>(如numpy.argmax)中找到最大<edit>的索引,使用矢量化操作(没有列表,循环)?
【问题讨论】:
-
暂时删除了我的问题,因为我认为我有答案:
numpy.argmax(numpy.equal.outer(m,a), axis=1),但这不适用于在许多地方出现相同最大值的示例... -
例如在这个数组上:
a = numpy.array([0, 1, 1, 3, 3, 1, 2]),其中两个块中出现相同的最大值3。 -
问题在于
np.maximum是ufunc和reduceat- 它有效地遍历数组,一次比较2 个值。但是np.max和np.argmax是同时对整个数组进行操作的函数。他们不是ufunc。 -
@hpaulj,是的,我知道这一点。我在问是否有人可以想到具有相同行为的解决方法。
标签: numpy vectorization reduction argmax numpy-ufunc