numpy.where () ayrıntılı, adım adım açıklama / örnekler [kapalı]


168

Zahmet düzgün anlama sahip numpy.where()okuma rağmen doc , bu yazı ve bu diğer yazı .

Birisi 1D ve 2D dizilerle adım adım yorumlanmış örnekler sağlayabilir mi?

Yanıtlar:


272

Bir süre uğraştıktan sonra işleri çözdüm ve başkalarına yardım edeceğini umarak buraya gönderiyorum.

Sezgisel olarak, np.where" bana bu dizide, girişlerin belirli bir koşulu karşıladığını söyle " diye sormak gibi .

>>> 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

Ayrıca, koşulu karşılayan dizideki girdileri almak için de kullanılabilir:

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

a2d dizisi olduğunda , bir dizi np.where()idx dizisi ve bir dizi col idx dizisi döndürür:

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

1d durumunda olduğu gibi np.where(), koşulu karşılayan 2d dizisindeki girişleri almak için kullanabiliriz :

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

Dizi ([9])


a1d olduğunda , np.where()yine de bir dizi idx dizisi ve bir dizi col idx dizisi döndürür, ancak sütunlar 1 uzunluğundadır, bu nedenle ikincisi boş dizidir.


10
"A 2d dizisi olduğunda, np.where () bir satır idx dizisi ve bir dizi col idx dizisi döndürür:" cevabını bulana kadar 2d'de kullanıldığında np.where'i anlamaya çalışıyordum. Bunun için teşekkürler.
bencampbell_14

1
Dokümanı üç kez okuduktan ve hala bulmacayı çözemedikten sonra oldukça aptal hissediyordum np.where(2d_array), bunu temizlediğiniz için teşekkürler! Kendi cevabınızı kabul etmelisiniz. e: Oh, kapalı. Eh, olmamalı
SMC'lere

5
Bu kapatılmış bir utanç. Ancak np.wherebu başka tam cevaba başka bir özellik eklemek istiyorum . İşlev, koşula bağlı olarak x ve y dizisindeki öğeleri de seçebilir. Bu yorumda sınırlı yer var ama bakın: 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]]))geri dönecek array([[4, 8, 6], [9, 2, 1]]). True / False'a bağlı olarak x ve y öğelerinin seçildiğine dikkat edin
piccolo

Bu cevapta verilen açıklama sadece np.where özel bir durumudur. Belgelere göre, Sadece conditionsağlandığında, bu işlev bir kısayol np.asarray(condition).nonzero().
Lenny

19

İşte biraz daha eğlenceli. NumPy'nin tam olarak istediğim şeyi yaptığını çok sık buldum - bazen bir şeyleri denemek benim için sadece belgeleri okumaktan daha hızlı. Aslında her ikisinin bir karışımı en iyisidir.

Bence cevabınız iyi (ve isterseniz kabul etmek sorun değil). Bu sadece "ekstra" dır.

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

verir:

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

... fakat:

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

verir:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.