我有一个 2D numpy 数组,我需要沿特定轴取最大值。然后我需要知道为该操作选择了哪些索引作为另一个操作的掩码,该操作仅在那些相同的索引上完成,但在另一个相同形状的数组上完成。
正确我是如何通过使用二维数组索引来做到这一点的,但它很慢而且有点复杂,尤其是生成行索引的 mgrid hack。这个例子只是 [0,1] 但我需要鲁棒性来处理任意形状。
a = np.array([[0,0,5],[0,0,5]])
b = np.array([[1,1,1],[1,1,1]])
columnIndexes = np.argmax(a,axis=1)
rowIndexes = np.mgrid[0:a.shape[0],0:columnIdx.size-1][0].flatten()
b[rowIndexes,columnIndexes] = b[rowIndexes,columnIndexes]+1
B 现在应该是 array([[1,1,2],[1,1,2]]),因为它只针对 a 的列中的最大值的索引对 b 执行了操作。
有人知道更好的方法吗?最好只使用布尔掩码数组,以便我可以将此代码移植到 GPU 上运行,而无需太多麻烦。谢谢!