web-dev-qa-db-ja.com

2D行列のNumpy where()

私はこのようなマトリックスを持っています

t = np.array([[1,2,3,'foo'],
 [2,3,4,'bar'],
 [5,6,7,'hello'],
 [8,9,1,'bar']])

行に文字列「bar」が含まれるインデックスを取得したい

1次元配列

rows = np.where(t == 'bar')

インデックス[0,3]に続いてブロードキャストが表示されます:-

results = t[rows]

私に正しい行を与えるはずです

しかし、それを2D配列で動作させる方法を理解できません。

18
Delta_Fore

一般的なケースでは、検索文字列が任意の列にある場合、これを行うことができます:

>>> rows, cols = np.where(t == 'bar')
>>> t[rows]
array([['2', '3', '4', 'bar'],
       ['8', '9', '1', 'bar']],
      dtype='|S11')
13
Jaime

インデックスを作成するcolに配列をスライスする必要があります。

rows = np.where(t[:,3] == 'bar')
result = t1[rows]

これは次を返します:

 [[2,3,4,'bar'],
  [8,9,1,'bar']]
12
Delta_Fore