2013-02-13 22 views
6

mam listę numerów które wprowadzone do numpy tablicy:numpy: stosując operator - tablic zawierających Brak

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

wtedy zostać odejmowanie od każdej wartości liczby w tablicy. Można to zrobić w ten sposób z tablicami NumPy:

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

Niestety, moje dane zawiera wartości często brakuje, reprezentowanych przez None. Dla tego rodzaju danych otrzymuję ten błąd:

>>> 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' 

co chciałbym dostać się do powyższego przykładu:

[ 9. 10. None] 

Jak mogę to osiągnąć w prosty i skuteczny sposób?

Odpowiedz

8

Moja rada jest taka, aby zarówno w ruchu zamaskowany tablic:

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

lub Koncepcja nieliczby

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

I rzeczywiście wolą Nans jak brakuje wskaźników danych.

+3

Te opcje są również dużo lepsze niż użycie Brak w tym, że tablica OP jest w rzeczywistości typu 'object', a zatem bardzo nieefektywna, rastrowa niż tablica float. – Dougal

+0

Wielkie dzięki, użycie 'numpy.nan' brzmi jak droga, bardziej praktyczne niż maskowane tablice. Kiedy zamaskowane tablice będą lepsze niż wskazywanie brakującego wskaźnika danych jako numpy.nan? – piokuc

+0

Myślę, że maskowane tablice mogą być lepsze do wykonywania niektórych operacji, takich jak sumy i średnie tablic (wtedy brakujące dane są traktowane poprawnie). Sądzę też, że możesz odróżnić rzeczywiste NaN od brakujących danych. W przeciwnym razie (powiedziałbym prawie zawsze) nans są lepsze IMO. –

Powiązane problemy