2012-12-08 28 views
7

Vì vậy, tôi có danh sách này được gọi là sumErrors đó là 16000 hàng và 1 cột, và danh sách này đã được phân loại thành 5 cụm khác nhau. Và những gì tôi đang làm là cắt danh sách cho mỗi cụm và tìm chỉ mục của giá trị nhỏ nhất trong mỗi slice.Tìm các chỉ số của ba giá trị hàng đầu thông qua argmin() hoặc min() trong python/numpy mà không có đột biến của danh sách?

Tuy nhiên, tôi chỉ có thể tìm thấy chỉ mục tối thiểu đầu tiên bằng cách sử dụng argmin(). Tôi không nghĩ rằng tôi chỉ có thể xóa các giá trị, bởi vì nếu không nó sẽ thay đổi các lát trên và các chỉ số là những gì tôi có để khôi phục ID ban đầu. Có ai biết làm thế nào để có được argmin() để nhổ ra các chỉ số cho ba thấp nhất?

Hoặc có lẽ một phương pháp tối ưu hơn? Có lẽ tôi nên chỉ cần gán số ID, nhưng tôi cảm thấy như có thể có một phương pháp thanh lịch hơn.

Trả lời

9

Numpy bao gồm chức năng argsort sẽ trả về tất cả các chỉ mục. Nếu tôi hiểu yêu cầu của bạn một cách chính xác, bạn sẽ có thể làm:

minidx = [] 
for cluster in sumErrors: 
    minidx.append(np.argsort(cluster)[:3]) 
+0

OOOOOH Tôi đã bỏ ra rất nhiều thời gian để làm việc đó. Tôi biết phải có một cách dễ dàng. Cảm ơn bạn rất nhiều! – Shinjitsu

1

numpy.argpartition (cluster, 3) sẽ hiệu quả hơn nhiều.

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