web-dev-qa-db-ja.com

ブールマスク配列を介してnumpy配列の要素を選択します

長さaのブールマスク配列nがあります。

a = np.array([True, True, True, False, False])

私はn列を持つ2D配列を持っています:

b = np.array([[1,2,3,4,5], [1,2,3,4,5]])

たとえば、「True」値のみを含む新しい配列が必要です。

c = ([[1,2,3], [1,2,3]])

c = a * bは、私が望まない偽の列に対しても「0」を含むため、機能しません。

c = np.delete(b, a, 1) does not work

助言がありますか?

31
JohnDoe

おそらく次のようなものが必要です:

>>> a = np.array([True, True, True, False, False])
>>> b = np.array([[1,2,3,4,5], [1,2,3,4,5]])
>>> b[:,a]
array([[1, 2, 3],
       [1, 2, 3]])

この種のインデックス付けが機能するためには、ndarrayではなく、listである必要があります。または、FalseおよびTrue0および1として解釈して、それらの列:

>>> b[:,[True, True, True, False, False]]   
array([[2, 2, 2, 1, 1],
       [2, 2, 2, 1, 1]])
42
DSM

numpy.maモジュールを使用して、np.ma.masked_array関数を使用できます。

>>> x = np.array([1, 2, 3, -1, 5])                                                
>>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])
masked_array(data=[1, 2, 3, --, 5], mask=[False, False,  False, True, False], fill_value=999999)
1
Magi