4

私は2つの派手な配列を持っています - 基本的にSimpleCV画像の派手な表現です。行列の 1 つには、一部のエントリを除いてほとんどゼロのエントリが含まれています。これらのゼロ以外のエントリを他のマトリックスにコピーしたいと思います。単純なループで簡単に実行できますがfor、明確さとパフォーマンス上の理由から numpy で実行したいと思います。ドキュメントを読んだ後、マスクされた配列が進むべき道のようですが、マスクされていないエントリのみをコピーするようにnumpyに指示する方法を理解するのに苦労しています。ダミーの例:

x = np.array([1,2,31,32,4,0,3,0,0,0])
y = np.ma.masked_where(x == 0, x)
z = np.array([99] * len(x))

z[:] = y

yのマスクされていないエントリのみを更新することを期待していますがz、代わりに通常のコピーが実行されます。私はここで正しい軌道に乗っていますか、それとも他の場所を見るべきですか?

4

2 に答える 2

3

これには、 の 3 つの引数形式を使用できますnp.where

>>> import numpy as np
>>> x = np.array([1,2,31,32,4,0,3,0,0,0])
>>> z = np.array([99] * len(x))
>>> y = np.where(x != 0, x, z)
>>> y
array([ 1,  2, 31, 32,  4, 99,  3, 99, 99, 99])
于 2013-11-06T16:58:20.250 に答える