numpy.where()詳細な段階的説明/例[終了]


168

ドキュメントこの投稿この他の投稿をnumpy.where()読んでも正しく理解できません。

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

回答:


272

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

直感的に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が2D配列の場合np.where()、行IDXの配列と列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])


ノートは、場合a1Dであり、np.where()依然として行IDXのとCOL IDXの配列の配列を返すが、列の長さは1であるので、後者は、空の配列です。


10
「aが2d配列の場合、np.where()は行idxの配列と列idxの配列を返します:」という答えが見つかるまで、2dで使用したときのnp.whereの理解に苦労していました。それをありがとう。
bencampbell_14

1
ドキュメントを3回読んだ後、私はかなり愚かな気持ちになりましたが、それでもパズルを解くことができませんnp.where(2d_array)でした。これを片付けてくれてありがとう!あなた自身の答えを受け入れるべきです。e:ああ、閉まっています。まあ、それはいけません
smcs

5
これが閉じられたのは残念です。しかし、私はnp.whereこの別の完全な答えに別の機能を追加したいと思います。この関数は、条件に応じて、x配列とy配列から要素を選択することもできます。このコメントでは限られたスペースが、以下を参照してくださいnp.where(np.array([[False,False,True], [True,False,False]]), np.array([[8,2,6], [9,5,0]]), np.array([[4,8,7], [3,2,1]]))戻りますarray([[4, 8, 6], [9, 2, 1]])。TrueとFalseに応じてxとy
piccolo

この回答で説明されている説明は、np.whereの特別なケースにすぎません。ドキュメントによると、のみconditionが提供されている場合、この関数はの省略形です np.asarray(condition).nonzero()
レニー

19

ここでもう少し楽しいです。私は、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]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.