ブール。
[0,9)の範囲の整数の配列を作成します。
In [326]: arr=np.random.randint(0,10,(20,4))
In [327]: arr
Out[327]:
array([[9, 4, 1, 1],
[6, 1, 9, 6],
[5, 3, 4, 9],
[7, 4, 0, 4],
[6, 2, 3, 5],
[4, 5, 1, 8],
[0, 9, 1, 3],
[7, 7, 1, 5],
[5, 9, 6, 6],
[0, 9, 2, 1],
[4, 9, 1, 6],
[5, 1, 5, 2],
[1, 5, 2, 0],
[9, 0, 6, 5],
[1, 9, 2, 4],
[6, 7, 7, 9],
[5, 2, 5, 4],
[1, 6, 5, 9],
[0, 4, 3, 1],
[7, 7, 7, 7]])
は0と3 Pythonの間に2列の要素を探す0<x<3
のようなテストをできますが、numpy
だけで一方的なものすることができます。かっこは、演算子の順序を確立するために重要です。 (|
または):
In [328]: mask=(0<arr[:,2:]) & (arr[:,2:]<3)
In [329]: mask
Out[329]:
array([[ True, True],
[False, False],
[False, False],
[False, False],
[False, False],
[ True, False],
[ True, False],
[ True, False],
[False, False],
[ True, True],
[ True, False],
[False, True],
[ True, False],
[False, False],
[ True, False],
[False, False],
[False, False],
[False, False],
[False, True],
[False, False]], dtype=bool)
いずれかの列が右の範囲内にある場合今、私たちは、行を選択することができます。
In [330]: arr[mask.any(axis=1),:]
Out[330]:
array([[9, 4, 1, 1],
[4, 5, 1, 8],
[0, 9, 1, 3],
[7, 7, 1, 5],
[0, 9, 2, 1],
[4, 9, 1, 6],
[5, 1, 5, 2],
[1, 5, 2, 0],
[1, 9, 2, 4],
[0, 4, 3, 1]])
またはその両方です:
In [331]: arr[mask.all(axis=1),:]
Out[331]:
array([[9, 4, 1, 1],
[0, 9, 2, 1]])
where
がしばしば使用されていますブール値配列をインデックス番号に変換する:
In [332]: np.where(mask.all(axis=1))
Out[332]: (array([0, 9], dtype=int32),)
In [333]: arr[_,:]
Out[333]:
array([[[9, 4, 1, 1],
[0, 9, 2, 1]]])
ohhhhh ...........私はこのようにするとは思わなかったでしょう。明らかに、私はもっと厄介なことを学ぶ必要がある!よく説明してくれてありがとうございました:) – ocean800
hmmm私は '' 1 ''を得るために条件が必要なので、 '' cond = np.array([[1,0]]) 'を使いました。 0の場合。しかし、このような条件は、この例では2番目の「0」より大きいすべてを返します。それを変える方法はありますか? – ocean800
あなたはそうです、 '__contains__'が書かれているので動作しません。私は答えを編集した、それは一般的なケースで動作するはずです。 – Mahdi