Câu trả lời cũ
nó là loại khó hiểu. Nó cung cấp cho bạn VỊ TRÍ (tất cả chúng) về nơi mà trạng thái của bạn là đúng.
vì thế:
>>> 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
Tôi sử dụng nó như một sự thay thế cho list.index (), nhưng nó cũng có nhiều cách sử dụng khác. Tôi chưa bao giờ sử dụng nó với mảng 2D.
http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html
Câu trả lời mới
Có vẻ như người đó đang hỏi một điều gì đó cơ bản hơn.
Câu hỏi đặt ra là làm thế nào BẠN có thể triển khai thứ gì đó cho phép một chức năng (chẳng hạn như ở đâu) biết những gì được yêu cầu.
Trước tiên, hãy lưu ý rằng việc gọi bất kỳ toán tử so sánh nào sẽ làm một điều thú vị.
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)`
Điều này được thực hiện bằng cách nạp chồng phương thức "__gt__". Ví dụ:
>>> class demo(object):
def __gt__(self, item):
print item
>>> a = demo()
>>> a > 4
4
Như bạn có thể thấy, "a> 4" là mã hợp lệ.
Bạn có thể nhận được danh sách đầy đủ và tài liệu về tất cả các hàm quá tải tại đây: http://docs.python.org/reference/datamodel.html
Một điều không thể tin được là nó đơn giản như thế nào để làm điều này. Tất cả các hoạt động trong python được thực hiện theo cách như vậy. Nói a> b tương đương với a. gt (b)!
numpy.where
có 2 'chế độ hoạt động', một chế độ đầu tiên trả vềindices
, ở đâucondition is True
và nếu các tham số tùy chọnx
vày
có mặt (cùng hình dạngcondition
hoặc có thể phát sóng với hình dạng đó!), Nó sẽ trả về giá trị từx
khi nàocondition is True
khácy
. Vì vậy, điều này làm chowhere
linh hoạt hơn và cho phép nó được sử dụng thường xuyên hơn. Cảm ơn