Jawaban Lama
agak membingungkan. Ini memberi Anda LOKASI (semuanya) di mana pernyataan Anda benar.
begitu:
>>> 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
Saya menggunakannya sebagai alternatif untuk list.index (), tetapi memiliki banyak kegunaan lain juga. Saya tidak pernah menggunakannya dengan array 2D.
http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html
Jawaban Baru
Tampaknya orang tersebut menanyakan sesuatu yang lebih mendasar.
Pertanyaannya adalah bagaimana ANDA dapat mengimplementasikan sesuatu yang memungkinkan suatu fungsi (seperti di mana) mengetahui apa yang diminta.
Pertama, perhatikan bahwa memanggil salah satu operator pembanding melakukan hal yang menarik.
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)`
Ini dilakukan dengan membebani metode "__gt__". Contohnya:
>>> class demo(object):
def __gt__(self, item):
print item
>>> a = demo()
>>> a > 4
4
Seperti yang Anda lihat, "a> 4" adalah kode yang valid.
Anda bisa mendapatkan daftar lengkap dan dokumentasi dari semua fungsi yang kelebihan beban di sini: http://docs.python.org/reference/datamodel.html
Sesuatu yang luar biasa adalah betapa sederhananya melakukan ini. SEMUA operasi di python dilakukan sedemikian rupa. Mengatakan a> b sama dengan a. gt (b)!
numpy.where
memang memiliki 2 'mode operasional', yang pertama mengembalikanindices
, di manacondition is True
dan jika parameter opsionalx
dany
ada (bentuk yang sama seperticondition
, atau disiarkan ke bentuk seperti itu!), Ia akan mengembalikan nilai darix
saatcondition is True
sebaliknyay
. Jadi ini membuatnyawhere
lebih serbaguna dan memungkinkannya untuk digunakan lebih sering. Terima kasih