Numpy掩盖3d阵列

时间:2017-10-26 09:27:34

标签: numpy

我不确定如何实现以下目标(最好没有循环)。 我有一个尺寸为100 * 100 * 3的numpy阵列A.

我还有一个具有相同尺寸(100 * 100 * 3)的numpy数组M. M实际上是一个掩码,对于大多数对(i,j),M [i,j]是[0,0,0],但是对于一些对(i,j),它不等于[0,0,0]

我想做的是以下内容:

A[i,j] = M[i,j] when M[i,j] != [0,0,0] 

A[ M != [0,0,0]] = M [ M != [0,0,0]]似乎无法发挥作用。

如何通过numpy有效地完成这项工作?

1 个答案:

答案 0 :(得分:0)

您需要在最后一个轴上查找ALL匹配,并将该掩码用于boolean-indexing/masking -

mask = ~(M==0).all(-1) # or (M!=0).any(-1)
A[mask] = M[mask]

或使用np.where -

mask = ~(M==0).all(-1,keepdims=1)
Aout = np.where(mask, M, A)