回答:
しばらくいじり回した後、私は物事を理解し、それが他の人に役立つことを願ってここに投稿しています。
直感的に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])
ノートは、場合a
1Dであり、np.where()
依然として行IDXのとCOL IDXの配列の配列を返すが、列の長さは1であるので、後者は、空の配列です。
np.where(2d_array)
でした。これを片付けてくれてありがとう!あなた自身の答えを受け入れるべきです。e:ああ、閉まっています。まあ、それはいけません
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
condition
が提供されている場合、この関数はの省略形です np.asarray(condition).nonzero()
。
ここでもう少し楽しいです。私は、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]