2014-09-27 22 views
5

Cho một mảng tôi cần tìm mức tối thiểu và vị trí tối thiểu. Điều này có thể được thực hiện bằng cách sử dụngtối thiểu và argmin trong numpy

>>> current_cost 
array([ 2.54802261, 2.98627555, 0.23873749, 1.82511195, 1.35469083]) 
>>> current_cost.min() 
0.23873748917821858 
>>> current_cost.argmin() 
2 

Giải pháp này không hiệu quả vì cần quét danh sách hai lần. Có cách nào để đạt được mức tối thiểu và agrmin cùng một lúc không?

+0

Nếu bạn đang làm điều này trong vòng lặp bên trong, có thể bạn nên sử dụng heap hoặc cây. – user1277476

+0

Tôi đang sử dụng nó trong một vòng lặp. Các giá trị của chi phí vectơ hiện tại thay đổi mỗi lần lặp lại – Donbeo

+0

Có thực sự phải là một hàm "np.arg ** và ** min (...)" – denvar

Trả lời

9
min_pos = current_cost.argmin() 
min_val = current_cost[min_pos] 
+1

Làm thế nào điều này có thể hoạt động khi bạn đang dùng argmin của một chiều đa chiều mảng dọc theo một trục? 'min_pos = a.argmin (trục = 1)', 'min_vals =?' –

+0

@MartinWiebusch 'min_val = current_cost [np.arange (current_cost.shape [0]), min_pos]' công trình; không chắc chắn nếu có gì đẹp hơn. – mc10

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