2010-05-12 37 views
14

Tôi muốn để có được những chỉ số của các giá trị min của một mảng NumPy chứa Nans và tôi muốn họ bỏ quaCó cách nào tốt hơn làm numpy.argmin() bỏ qua các giá trị NaN

>>> a = array([ nan, 2.5, 3., nan, 4., 5.]) 
>>> a 
array([ NaN, 2.5, 3. , NaN, 4. , 5. ]) 

nếu tôi chạy argmin, nó sẽ trả về chỉ số của đầu tiên NaN

>>> a.argmin() 
0 

tôi thay Nans với INFs và sau đó chạy argmin

>>> a[isnan(a)] = Inf 
>>> a 
array([ Inf, 2.5, 3. , Inf, 4. , 5. ]) 
>>> a.argmin() 
1 

Tình thế tiến thoái lưỡng nan của tôi như sau: Tôi không muốn thay đổi NaN thành Infs và sau đó trở lại sau khi tôi hoàn thành với argmin (vì NaN có nghĩa sau này trong mã). Có cách nào tốt hơn để làm điều này?

Ngoài ra còn có câu hỏi về kết quả là gì nếu tất cả các giá trị ban đầu của a là NaN? Khi triển khai câu trả lời của tôi là 0

Trả lời

27

Chắc chắn! Sử dụng nanargmin:

import numpy as np 
a = np.array([ np.nan, 2.5, 3., np.nan, 4., 5.]) 
print(np.nanargmin(a)) 
# 1 

Cũng nansum, nanmax, nanargmaxnanmin,

là Trong scipy.stats, có nanmeannanmedian.

For more ways để bỏ qua nan s, hãy xem masked arrays.

+0

Cảm ơn bạn ~ unutbu! –

+0

Bạn không có ý tưởng làm thế nào hạnh phúc này làm cho tôi. – weronika

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