Câu trả lời:
Sau khi loay hoay một lúc, tôi phát hiện ra mọi chuyện, và đang đăng chúng lên đây với hy vọng nó sẽ giúp được người khác.
Theo trực giác, np.where
giống như hỏi " cho tôi biết nơi nào trong mảng này, các mục thỏa mãn một điều kiện nhất định ".
>>> 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
Nó cũng có thể được sử dụng để có được các mục trong mảng thỏa mãn điều kiện:
>>> a[np.where(a < 8)]
array([5, 6, 7]) # selects from a entries 0, 1, 2
Khi a
là mảng 2d, np.where()
trả về một mảng của idx's row và một mảng col idx's:
>>> a = np.arange(4,10).reshape(2,3)
array([[4, 5, 6],
[7, 8, 9]])
>>> np.where(a > 8)
(array(1), array(2))
Như trong trường hợp 1d, chúng ta có thể sử dụng np.where()
để nhận các mục trong mảng 2d thỏa mãn điều kiện:
>>> a[np.where(a > 8)] # selects from a entries 0, 1, 2
mảng ([9])
Lưu ý, khi a
là 1d, np.where()
vẫn trả về một mảng của idx's row và một mảng của col idx's, nhưng các cột có độ dài 1, do đó, sau đó là mảng trống.
np.where(2d_array)
, cảm ơn vì đã làm sáng tỏ điều này! Bạn nên chấp nhận câu trả lời của riêng bạn. e: Ồ, nó đã đóng cửa. Chà, không nên
np.where
cho câu trả lời đầy đủ này. Hàm cũng có thể chọn các phần tử từ mảng x và y tùy thuộc vào điều kiện. Không gian hạn chế trong bình luận này nhưng xem: 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]]))
sẽ trở lại array([[4, 8, 6], [9, 2, 1]])
. Lưu ý các yếu tố nào của x và y được chọn tùy thuộc vào Đúng / Sai
condition
được cung cấp, chức năng này là một tốc ký cho np.asarray(condition).nonzero()
.
Ở đây vui hơn một chút. Tôi đã thấy rằng NumPy rất thường xuyên làm chính xác những gì tôi muốn nó sẽ làm - đôi khi tôi chỉ muốn thử mọi thứ nhanh hơn là đọc tài liệu. Trên thực tế một hỗn hợp của cả hai là tốt nhất.
Tôi nghĩ rằng câu trả lời của bạn là tốt (và chấp nhận nó nếu bạn muốn). Đây chỉ là "thêm".
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
cho:
wh: (array([1, 1]), array([1, 2]))
gt: [[False False False]
[False True True]]
x: (array([1, 1]), array([1, 2]))
... nhưng:
print "a[wh]: ", a[wh]
print "a[gt] ", a[gt]
print "a[x]: ", a[x]
cho:
a[wh]: [8 9]
a[gt] [8 9]
a[x]: [8 9]