web-dev-qa-db-ja.com

numpy.where()の詳細なステップごとの説明/例

docこの記事 そして この他の記事 を読んでもnumpy.where()を正しく理解できないのですが。

1Dと2Dの配列を使用した段階的なコメント付きの例を誰かが提供できますか?

138

しばらくの間いじった後、私は物事を考え出しました、そして、それが他の人に役立つことを願ってそれらをここに投稿しています。

直感的には、np.whereは " この配列のどこでエントリが与えられた条件を満たすかを教えてください ".

>>> a = np.arange(5,10)
>>> np.where(a < 8)       # tell me where in a, entries are < 8
(array([0, 1, 2]),)       # answer: entries indexed by 0, 1, 2

条件を満たすエントリを配列で取得するためにも使用できます。

>>> a[np.where(a < 8)] 
array([5, 6, 7])          # selects from a entries 0, 1, 2

Aが2次元配列の場合、np.where()は行idxの配列とcol idxの配列を返します。

>>> a = np.arange(4,10).reshape(2,3)
array([[4, 5, 6],
       [7, 8, 9]])
>>> np.where(a > 8)
(array(1), array(2))

そのため、1dの場合と同様に、np.where()を使用して、条件を満たす2d配列のエントリを取得できます。

>>> a[np.where(a > 8)] # selects from a entries 0, 1, 2

配列([9])


aが1dのとき、np.where()はまだ行idxの配列とcol idxの配列を返しますが、列は長さ1なので、後者は空の配列です。

228

これはもう少し楽しいです。私は、NumPyがまさに私が望んでいることを正確に実行することを発見しました。実際には両方を混ぜるのが最善です。

私はあなたの答えは大丈夫だと思います(そしてあなたが好きならそれを受け入れても大丈夫です)。これは単なる「追加」です。

import numpy as np

a = np.arange(4,10).reshape(2,3)

wh = np.where(a>7)
gt = a>7
x  = np.where(gt)

print "wh: ", wh
print "gt: ", gt
print "x:  ", x

を与えます:

wh:  (array([1, 1]), array([1, 2]))
gt:  [[False False False]
      [False  True  True]]
x:   (array([1, 1]), array([1, 2]))

...しかし:

print "a[wh]: ", a[wh]
print "a[gt]  ", a[gt]
print "a[x]:  ", a[x]

を与えます:

a[wh]:  [8 9]
a[gt]   [8 9]
a[x]:   [8 9]
15
uhoh