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?
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:
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
a
2d 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])
a
1d 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.
np.where(2d_array)
, bunu temizlediğiniz için teşekkürler! Kendi cevabınızı kabul etmelisiniz. e: Oh, kapalı. Eh, olmamalı
np.where
bu 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
condition
sağlandığında, bu işlev bir kısayol np.asarray(condition).nonzero()
.
İş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]