2012-10-03 44 views
23

Có cách nào để lưu trữ NaN trong một dãy số nguyên Numpy không? tôi nhận được:Số nguyên Numpy nan

a=np.array([1],dtype=long) 
a[0]=np.nan 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: cannot convert float NaN to integer 
+0

@ tpg2114, vâng, nó sẽ không rõ ràng với tôi nếu câu trả lời có về gấu bông hoặc gấu trúc. – Yariv

Trả lời

23

Không, bạn không thể, ít nhất là với phiên bản hiện tại của NumPy. A nan là một giá trị đặc biệt cho mảng phao chỉ.

Có các cuộc đàm phán về việc giới thiệu một bit đặc biệt cho phép các mảng không nổi để lưu trữ những gì trong thực tế sẽ tương ứng với nan, nhưng cho đến nay (2012/10), đó chỉ là cuộc đàm phán.

Trong thời gian chờ đợi, bạn có thể muốn xem gói numpy.ma: thay vì chọn số nguyên không hợp lệ như -99999, bạn có thể sử dụng giá trị numpy.ma.masked đặc biệt để thể hiện giá trị không hợp lệ.

a = np.ma.array([1,2,3,4,5], dtype=int) 
a[1] = np.ma.masked 
masked_array(data = [1 -- 3 4 5], 
      mask = [False True False False False], 
     fill_value = 999999) 
+4

Nhưng lưu ý rằng có một chi phí hiệu suất rất lớn để sử dụng mảng mặt nạ khi chúng được thực hiện trong python tinh khiết! – gaborous

4

Một nan là một điểm nổi chỉ điều, không có đại diện của nó trong số nguyên, vì vậy không :)

Chọn một giá trị không hợp lệ, như -99999

+3

Chọn một giá trị chuẩn là không hợp lệ sẽ không phải là một giải pháp tốt vì nó sẽ không tái tạo các đặc tính giống như nan, cụ thể là: sự so sánh giữa nan và bất kỳ giá trị nào khác bao gồm cả chính nó là sai. – christang

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