2013-02-13 36 views
6

Tôi có một danh sách các số mà tôi đưa vào một mảng NumPy:NumPy: sử dụng nhà điều hành - với mảng chứa Không

>>> import numpy as np 
>>> v=np.array([10.0, 11.0]) 

sau đó tôi muốn trừ một số từ mỗi giá trị trong mảng. Nó có thể được thực hiện như thế này với mảng NumPy:

>>> print v - 1.0 
[ 9. 10.] 

Thật không may, dữ liệu của tôi thường chứa các giá trị bị mất, đại diện bởi None. Đối với loại dữ liệu này tôi nhận được lỗi này:

>>> v=np.array([10.0, 11.0, None]) 
>>> print v - 1.0 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for -: 'NoneType' and 'float' 

Những gì tôi muốn có được cho ví dụ trên là:

[ 9. 10. None] 

Làm thế nào tôi có thể đạt được điều đó một cách dễ dàng và hiệu quả?

Trả lời

8

Khuyến cáo của tôi là một trong hai mảng sử dụng đeo mặt nạ:

v = np.ma.array([10., 11, 0],mask=[0, 0, 1]) 
print v - 10 
>>> [0.0 1.0 --] 

hoặc Nans

v = np.array([10.,11,np.nan]) 
print v - 10 
>>> [ 0. 1. nan] 

Tôi thực sự thích Nans như thiếu các chỉ số dữ liệu.

+3

Các tùy chọn này cũng tốt hơn nhiều so với việc sử dụng Không trong mảng OP đó thực sự thuộc loại 'đối tượng' và do đó rất kém hiệu quả, raster hơn mảng nổi. – Dougal

+0

Cảm ơn rất nhiều, bằng cách sử dụng âm thanh 'numpy.nan' giống như cách đi, thực tế hơn so với mảng được che dấu. Khi nào các mảng mặt nạ sẽ tốt hơn là biểu thị chỉ báo dữ liệu bị thiếu là numpy.nan? – piokuc

+0

Tôi nghĩ mảng mặt nạ có thể tốt hơn để thực hiện một số thao tác như nói tổng và trung bình của mảng (khi đó dữ liệu bị thiếu được xử lý đúng). Ngoài ra, tôi đoán bạn có thể phân biệt NaN thực tế với dữ liệu bị thiếu. Nếu không (tôi sẽ nói khá nhiều luôn) nans là IMO tốt hơn. –