2016-03-25 20 views
6

Tôi có một np.array với hơn 330.000 hàng. Tôi chỉ đơn giản là cố gắng lấy trung bình của nó và nó trả về NaN. Ngay cả khi tôi cố gắng lọc ra bất kỳ giá trị NaN tiềm năng trong mảng của tôi (không nên có bất kỳ anyways), trung bình trả về NaN. Tôi đang làm điều gì đó hoàn toàn lập dị?Giá trị trung bình của một mảng có khối u trả về NaN

Mã của tôi là ở đây:

average(ngma_heat_daily) 
Out[70]: nan 

average(ngma_heat_daily[ngma_heat_daily != nan]) 
Out[71]: nan 

Trả lời

5

thử điều này:

>>> np.nanmean(ngma_heat_daily) 

Chức năng này giảm NaN giá trị từ mảng trước khi dùng giá trị trung bình.

Chỉnh sửa: lý do mà average(ngma_heat_daily[ngma_heat_daily != nan]) không hoạt động là vì điều này:

>>> np.nan == np.nan 
False 

theo tiêu chuẩn IEEE dấu chấm động, NaN không bằng chính nó! Bạn có thể làm điều này thay vì để thực hiện các ý tưởng tương tự:

>>> average(ngma_heat_daily[~np.isnan(ngma_heat_daily)]) 

np.isnan, np.isinf, và chức năng tương tự là rất hữu ích cho loại dữ liệu mặt nạ.

+0

Đã hoạt động! Bạn có thể giải thích vấn đề là gì với chỉ lấy trung bình? Tôi có một mảng của 16k mục (được sản xuất từ ​​cùng một nguồn gốc) mà làm việc tốt với phương pháp() trung bình. – Asif

+0

Chỉ cần xem bản chỉnh sửa của bạn với phần giải thích. Cảm ơn! – Asif

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