2013-02-13 21 views
6

ihtiva eden dizilerle:numpy: operatörü ile - ben numpy diziye koymak numaralarının listesi Hiçbiri

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

sonra dizideki her bir değeri arasında bir sayı çıkarma istiyoruz. Bu numpy diziler ile böyle yapılabilir:

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

Maalesef benim veriler genellikle None ile temsil eksik değerleri içerir.

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

Yukarıdaki örneğin almak istiyorum nedir: bu tür veriler için bu hatayı alıyorum

[ 9. 10. None] 

nasıl kolay ve verimli bir şekilde elde edebilirsiniz?

cevap

8

Benim tavsiye ya kullanımının maskeli diziler şudur:

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

veya NaN'ler

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

Aslında veri göstergelerini eksik olarak NaN'ler tercih ederim.

+3

Bu seçenekler, OP'nin dizisinin aslında "nesne" türünde olduğunu ve bu nedenle çok değişkensiz, bir süzgeç dizisinden daha fazla raster içermesinden çok daha iyidir. – Dougal

+0

Çok teşekkürler, "numpy.nan" işlevini kullanarak, maskelenmiş dizilerden daha pratik bir yol gibi geliyor. Maskelenmiş diziler, numpy.nan olarak eksik veri göstergesini temsil etmekten daha iyi olur mu? – piokuc

+0

Sanırım maskeli diziler, toplamlar ve dizilerin ortalamaları gibi bazı işlemler yapmak için daha iyi olabilir (daha sonra eksik veriler düzgün şekilde ele alınır). Ayrıca, gerçek NaN'leri eksik verilerden ayırt edebilirsiniz. Aksi takdirde (hemen hemen her zaman söyleyebilirim) nans daha iyi IMO. –