2017-10-26 6 views
0

私は次のように(できればループなしで)達成する方法がわかりません。 私は、100 * 100 * 3の寸法を持つ数え切れない配列Aを持っています。ナンシーマスキングの3D配列

私は同じ次元(100 * 100 * 3)を持つ数値配列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で効率的に行うにはどうすればいいですか?

答えて

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)