2013-08-06 51 views
17

Trong Python, chúng ta có thể lấy chỉ mục của một giá trị trong một mảng bằng cách sử dụng .index(). Làm thế nào tôi có thể làm điều đó với một mảng NumPy?Chỉ mục của phần tử trong mảng NumPy

Khi tôi cố gắng làm

decoding.index(i) 

nó nói rằng các thư viện NumPy không hỗ trợ chức năng này. Có cách nào để làm điều đó?

Trả lời

27

Sử dụng np.where để nhận các chỉ mục trong đó điều kiện nhất định là True.

Ví dụ:

Đối với một 2D np.ndarray:

i,j = np.where(a==value) 

Đối với một mảng 1D:

i, = np.where(a==value) 

Nếu cũng làm việc cho các tình trạng như >=, <=, != và vv .. .

Bạn có thể cũng tạo một lớp con của np.ndarray với một phương pháp index():

class myarray(np.ndarray): 
    def __new__(cls, *args, **kwargs): 
     return np.array(*args, **kwargs).view(myarray) 
    def index(self, value): 
     return np.where(self==value) 

Thử nghiệm:

a = myarray([1,2,3,4,4,4,5,6,4,4,4]) 
a.index(4) 
#(array([ 3, 4, 5, 8, 9, 10]),) 
2

Tôi đang phân vân giữa hai cách thực hiện một chỉ số của một mảng NumPy:

idx = list(classes).index(var) 
idx = np.where(classes == var) 

Cả hai đều có cùng số ký tự, nhưng phương thức thứ hai trả về một int, thay vì một số nparray.

Các vấn đề liên quan