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]
# ...