2012-08-25 77 views
6

Tôi có một mảng chủ sần. Với một mảng giá trị tìm kiếm khác, với các phần tử lặp lại, tôi muốn tạo ra các chỉ mục của các giá trị tìm kiếm này trong mảng chủ.Tìm chỉ mục của một danh sách giá trị trong một mảng có nhiều mảng

Ví dụ: mảng tổng thể được [1,2,3,4,5], mảng tìm kiếm là [4,2,2,3]

Giải pháp: [3,1,1,2]

Có chức năng numpy "bản địa" thực hiện điều này một cách hiệu quả (có nghĩa là ở tốc độ C, thay vì tốc độ python) không?

Tôi biết về giải pháp sau đây, nhưng, trước tiên, đó là danh sách python hiểu và thứ hai, nó sẽ tìm kiếm chỉ mục 2 lần.

ma = np.array([1,2,3,4,5]) 
sl = np.array([4,2,2,3]) 
ans = [np.where(ma==i) for i in sl] 

Ngoài ra, nếu tôi phải sử dụng để phân loại và tìm kiếm nhị phân, tôi sẽ làm nó như một phương sách cuối cùng (chơi không dành cho tất cả các cấp). Tôi quan tâm đến việc tìm kiếm nếu tôi đang thiếu một cái gì đó cơ bản từ thư viện gumpy. Những danh sách này rất lớn, vì vậy hiệu suất là tối quan trọng.

Cảm ơn.

Edit: Trước khi đăng Tôi muốn thử những điều sau với kết quả ảm đạm:

[np.searchsorted(ma,x) for x in sl] 

Giải pháp đăng bởi @pierre là nhiều hơn nữa performant và chính xác những gì tôi đang tìm kiếm.

Trả lời

14

Liệu np.searchsorted có phù hợp với bạn không?

>>> master = np.array([1,2,3,4,5]) 
>>> search = np.array([4,2,2,3]) 
>>> np.searchsorted(master, search) 
array([3, 1, 1, 2]) 
+0

Tuyệt đối! Chỉ cần hoàn thành profiling mã của bạn và nó hoạt động tuyệt vời. Sẽ chỉnh sửa câu hỏi của tôi để đăng kết quả. – Fenchurch

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