2017-10-04 3 views
1

私は500行5列の配列を持っています。私は最後の4列のそれぞれの値が100より大きいすべての行を見つける必要があります。私は個々の列を個別にチェックする方法を見つけましたが、すべてを一度にチェックしたいと思います。私は軸の引数を挿入しようとしましたが、それは私にエラーを与える。これを行うための簡単な方法が必要です。これは私が仕事に行くことができるものである:すべての列がnumpy配列の特定の基準を満たす行を出力しますか?

over1 = (array[:,1] >= 100) 
over2 = (array[:,2] >= 100) 
over3 = (array[:,3] >= 100) 
over4 = (array[:,4] >= 100) 
where = np.argwhere(over1&over2&over3&over4 == True) 
there = array[where] 
there2 = np.array(there[:,0]) 
#I had to reshape because the new array was a different shape for some reason 

私はPythonとnumpyのに新たなんだので、私はいくつかのトラブル

+0

配列[(配列> = 100).all(軸= 1)] ' – Julien

+0

@Julienそれは働いた。どのように説明できますか? – mama

答えて

1

を抱えている私は、あなたが探していると信じて:

x[(x[:, 1:] > 100).all(axis=1)] 

xを考えてみましょう:

print(x) 
array([[ 79, 192, 163, 94, 186], 
     [111, 183, 152, 115, 171], 
     [ 61, 125, 91, 163, 60], 
     [110, 24, 0, 151, 180], 
     [165, 111, 141, 19, 81]]) 

操作x[:, 1:] > 100は、すべての要素に対して操作をブロードキャストし、結果としてブール値の行列になります。作り付けの機能allに似

print(x[:, 1:] > 100) 
array([[ True, True, False, True], 
     [ True, True, True, True], 
     [ True, False, True, False], 
     [False, False, True, True], 
     [ True, True, False, False]], dtype=bool) 

np.all、すべての要素がTrueであれば、それはFalseに評価され、他の、Trueと評価されます。行ごとにこのチェックを実行したいので、axis=1が必要です。

mask = (x[:, 1:] > 100).all(1) 
print(mask) 
Out[362]: array([False, True, False, False, False], dtype=bool) 

このマスクは、オリジナルのインデックスに使用されるようになりました。

x[mask] 
array([[111, 183, 152, 115, 171]]) 
関連する問題