2010-07-16 22 views
5

Pekala, aşırı çaylak sorunu burada. Programımda, bazılarının girişlerinin eksik olduğu bir 2D numpy dizisi oluşturuyoruz ("nan" türü olmayan, fakat "None" türü veya NoneType değil). Bu kayıtların üzerine bir maske koymak isterdim, ama bunu yapmakta sorun yaşıyorum. Normalde, üzerinde maskelemek için, diyelim ki, değeri 2 ile tüm girişler, bu durumdaBir sayı dizisinde eksik değerleri bulma

A = np.ma.masked_where (A [A == 2], A)

yapardım, o gelmez İlk parametre için denediğim şey işe yaramıyor. Düşünceler? Eğer dizideki -- girdilerine sahip yana

cevap

5

, ben zaten maskelenmiş anlamına geldiğini tahmin:

>>> m = ma.masked_where([True, False]*5, arange(10)) 
>>> print m 
[-- 1 -- 3 -- 5 -- 7 -- 9] 

Yani, senin girişleri zaten maskelenmiş söyleyebilirim ve doğrudan diziyi kullanabileceği .

yalnızca olmayan maskeli değeri içeren bir diziyi oluşturmak isterseniz m maskeli dizi nerede olduğunu

>>> m[~m.mask] 
[1 3 5 7] 

yapabilirsiniz. Eğer maskeli değerler listesini olmasını istiyorsanız

, sadece başka değerler de seçebilirsiniz:

>>> m[m.mask] 
[0 2 4 6 8] 

Not eksik değerler genellikle değil Yok, ama orijinal değerler olduğunu. Aslında, bir tam sayı dizisi Yok'u içeremez. Eğer maskeli değerlerin indeksleri istiyorsanız

, yapabileceğiniz:

>>> numpy.nonzero(m.mask) 

numpy.nonzero() ait documentation onun sonucu yorumlanması gerekir açıklamaktadır.

+0

İyi nokta: İşte bir örnek. Daha fazla araştırmadan sonra haklı olduğunuzu görüyorum. Aslında problem olan değerler, daha önce fark etmemiş olduğum gibi gözüküyor, aslında “Yok”. Şimdi, soruyu ne olması gerektiği ile değiştireceğim: "Yok" değerlerini bulmaya nasıl başlıyorsunuz? A [A == Yok] sadece bir sebepten dolayı A [0 ,:] verir. – user391045

+0

Cevabımda daha fazla bilgi ekledim: Umarım ihtiyacın olanı bulursun! :) – EOL

+0

@ dave-schultz: Yukarıdaki yorumunuzdaki ifadeniz, sorunun daha açık bir ifadesiyse, sorunuzu bu durumu yansıtacak şekilde düzenlediyseniz yardımcı olabilir. Daha fazla kişi sorunuzu buradaki yorumunuzdan okuyacak. – tom10

5

Hiçbiri olmayan bir numpy dizisindeki öğeleri bulmak için numpy.equal öğesini kullanabilirsiniz.

import numpy as np 
import MA 

x = np.array([1, 2, None]) 

print np.equal(x, None) 
# array([False, False, True], dtype=bool) 

# to get a masked array 
print MA.array(x, mask=np.equal(x,None)) 
# [1 ,2 ,-- ,] 
İlgili konular