2016-03-23 24 views
3

Çıktının AUTO sayısal sürdürme paketinden alıyorum ve fiziksel olmayan, değişkenlerin negatif değerlerini içeren sonuçları filtrelemem gerekiyor. Ben varsa, örneğin Yani: Ben istiyorum Numpy - veri satırlarını negatif değerlerle silme

>>> a = np.array([[0,1,2,3,4],[-1,-0.5,0,0.5,1],[-3,-4,-5,0.1,0.2]]) 

kalması anlamına:

>>> b 
array([[ 3. , 4. ], 
     [ 0.5, 1. ], 
     [ 0.1, 0.2]]) 

Ama numpy.where çalıştığımda alıyorum:

olduğunu
>>> b = a[:,(np.where(a[1]>=0) and np.where(a[2]>=0))] 
>>> b 
array([[[ 3. , 4. ]], 

     [[ 0.5, 1. ]], 

     [[ 0.1, 0.2]]]) 
>>> b.shape 
(3, 1, 2) 

, bu ekler diziye başka bir istenmeyen eksen. Neyi yanlış yapıyorum?

+0

Tamamen pozitif olan sütunlarsınız, değil mi? – jrjc

cevap

6

yapmak istediğiniz tüm bir veya daha fazla negatif değerlere sahip sütunları kaldırmaktır varsayarsak, bu yapabilirdi:

a = np.array([[0,1,2,3,4],[-1,-0.5,0,0.5,1],[-3,-4,-5,0.1,0.2]]) 
b = a[:,a.min(axis=0)>=0] 
1

tam pozitif sütunlardır istediğini, o zaman Yakym cevabı yoludur @ muhtemelen daha hızlı olduğu gibi gitmek.

>>> a[:, (a[1] >= 0) & (a[2] >= 0)] 
array([[ 3. , 4. ], 
     [ 0.5, 1. ], 
     [ 0.1, 0.2]]) 

İşte (a[1] >= 0) ve (a[2] >= 2)& (boolean/mantıksal tarafından birleştirilir boolean maske oluşturun: bu sadece bir örnek olduğunu ve eşik belirli sütunlar istiyorsanız Ancak, göze hitap eden senin örnek değiştirerek bunu yapabilirsiniz ve) operatörü ve dizi a dizinlemek için kullanılır.

İlgili konular