2017-11-09 11 views
0

のpython 3.6.3/numpyの私は新たなんだ1.13.3/Ubuntuの17.102D numpyの配列の列に一致する、2D numpyの配列[OK]で行を一致検索できませんOK

がnumpyのとブールインデックスといくつかの問題に直面します。 これは私のテストアレイである:

>>> b 
array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14], 
     [15, 16, 17, 18, 19]]) 

インデックス1本のマッチを有する行、Iは

>>> np.all(b==(5, 6, 7, 8, 9), axis=1) 
array([False, True, False, False], dtype=bool) 

[9、5、6、7、8]の値を持つ行を取得したいとそれが動作します。

今、私は値を持つ列を取得したい[4,9,14,29]と私は試してみてください。

>>> np.all(b==(4, 9, 14, 19), axis=0) 
False 

が、結果があるため、(少なくとも私が)期待されるものではありません

array([False, False, False, False, True], dtype=bool) 

がインデックスに私は推測で間違って何4.

と一致する列があることを私に言って:私の希望は、次のようなブール配列を取得するのですか?

答えて

0

np.allは、与えられた軸に沿ったすべての配列が真であるかどうかを調べるため、2番目の配列を2次元配列のすべての行と比較し、等しいかどうかに応じてtrueまたはfalseを設定します。

その後、指定された軸(0の場合は列の軸)に沿ったすべての配列(ブール値)が真でないと評価されるようになりました(元の2d配列の行サイズと渡された配列のサイズ一致しないのですべてが偽です)、したがってnp.allもfalseを返します。

は、あなたがこれを行うには配列を使用する必要があります。この

np.all(b.T==(4, 9, 14, 19), axis=0) 
0

を試してみてください。

In [17]: col = np.array((4, 9, 14, 19)).reshape(-1, 1) 

In [18]: b == col 
Out[18]: 
array([[False, False, False, False, True], 
     [False, False, False, False, True], 
     [False, False, False, False, True], 
     [False, False, False, False, True]], dtype=bool) 

そして:

In [22]: (b == col).all(axis=0) 
Out[22]: array([False, False, False, False, True], dtype=bool) 
と心の中で正しい寸法を維持
関連する問題