Numpy 如何从屏蔽数组的索引中获取二维数组的索引

Numpy 如何从屏蔽数组的索引中获取二维数组的索引,numpy,indexing,mask,Numpy,Indexing,Mask,我需要一个二维数组的原始索引在一个屏蔽数组的索引上循环。我尝试: for i in range(Arr[mask].size): tmp = numpy.zeros(mask.shape, dtype=bool) tmp[mask][i] = True j,k = numpy.where(tmp) ... 不幸的是,最后一行返回 (array([], dtype=int64), array([], dtype=int64)) 找到j和k的好方法是什么?因

我需要一个二维数组的原始索引在一个屏蔽数组的索引上循环。我尝试:

for i in range(Arr[mask].size):
    tmp = numpy.zeros(mask.shape, dtype=bool)
    tmp[mask][i] = True
    j,k = numpy.where(tmp)
    ...
不幸的是,最后一行返回

(array([], dtype=int64), array([], dtype=int64))   

找到j和k的好方法是什么?

因为它是一个2D数组,您可以简单地在掩码上迭代,而不是在掩码数组上迭代:

for j, k in zip(*np.where(mask)):
    value = Arr[j,k]
    # ...
如果您还想获取当前(屏蔽)值的编号:


真管用!非常感谢。此外,我在enumerate(zip(*np.where(mask)))中使用“for I,(j,k)”来获取索引“I”
np.transpose(np.where(…)
生成一个索引对数组。
np.argwhere
做同样的事情。
zip(*…)
是一个列表转置。使用布尔索引
tmp[mask][I]=
不修改
tmp
tmp[mask]
是一个副本。
中的
是准确的-在
tmp
中没有任何
真值。
for i, (j, k) in enumerate(zip(*np.where(mask))):
    value = Arr[j,k]
    # ...