2016-03-23 13 views
3

私はAUTO数値継続パッケージからの出力を取りますが、変数が負でない結果をフィルタリングする必要があります。だから私は、例えば、持っている場合:Numpy - 負の値を持つデータ行を削除する

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

私は残されたい:

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

しかし、私はnumpy.whereをしようとすると、私が手:

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

つまり、それが追加されますアレイへの不要な別の軸。私は間違って何をしていますか?

+0

あなたは完全に肯定的な列ですか? – jrjc

答えて

6

あなたがしたいすべてが1つまたは複数の負の値を持つ列を削除すると仮定すると、あなたはこれを行うことができます:

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

は、あなたが完全に肯定列です何をしたい場合は、Yakymの答えは方法です@それはおそらくより速いです。しかし、それはあくまで一例だったとあなたがしきい値特定の列にしたい場合は、あなたが見た目あなたの例を変更することによって、それを行うことができます:ここでは

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

(a[1] >= 0)(a[2] >= 2)&(ブーリアン/論理によってマージされるブールマスクを作成しますand)演算子を使用し、配列aのインデックスに使用されます。

関連する問題