Eski Cevap
biraz kafa karıştırıcı. Size ifadenizin doğru olduğu KONUMLARI (hepsini) verir.
yani:
>>> a = np.arange(100)
>>> np.where(a > 30)
(array([31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
99]),)
>>> np.where(a == 90)
(array([90]),)
a = a*40
>>> np.where(a > 1000)
(array([26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
94, 95, 96, 97, 98, 99]),)
>>> a[25]
1000
>>> a[26]
1040
List.index () 'e alternatif olarak kullanıyorum, ancak başka birçok kullanımı da var. Hiç 2D dizilerle kullanmadım.
http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html
Yeni Cevap
Görünüşe göre kişi daha temel bir şey soruyordu.
Soru, bir işlevin (nerede gibi) neyin talep edildiğini bilmesine izin veren bir şeyi nasıl uygulayabileceğiydi.
İlk olarak, karşılaştırma operatörlerinden herhangi birini çağırmanın ilginç bir şey yaptığını unutmayın.
a > 1000
array([False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True`, True, True, True, True, True, True, True, True, True], dtype=bool)`
Bu, "__gt__" yöntemini aşırı yükleyerek yapılır. Örneğin:
>>> class demo(object):
def __gt__(self, item):
print item
>>> a = demo()
>>> a > 4
4
Gördüğünüz gibi, "a> 4" geçerli bir koddu.
Tüm aşırı yüklenmiş işlevlerin tam listesini ve belgelerini burada bulabilirsiniz: http://docs.python.org/reference/datamodel.html
İnanılmaz olan bir şey, bunu yapmanın ne kadar basit olduğudur. Python'daki TÜM işlemler bu şekilde yapılır. A> b demek, a'ya eşdeğerdir. gt (b)!
numpy.where
ilk 2 'operasyonel modları', bir döner varindices
,condition is True
ve isteğe bağlı parametreleri isex
vey
(aynı şekilde şekil mevcutturcondition
, bu değerleri döndürür veya bu tür şekle broadcastable!)x
Ne zamancondition is True
aksi dany
. Bu,where
daha çok yönlü hale getirir ve daha sık kullanılmasını sağlar. Teşekkürler