2010-11-21 12 views
0

私はnumpyの2D配列を持っており、(r、c-1)(行r、coloumn c)が特定の値(int n)と等しいcoloumn cを返すようにしたい。特定の値を含む配列の行を抽出する方法は? (numpy、scipy)

が4000は彼らのものであり、この2次元配列は、ちょうど私が谷を見ている20の一つであるので、私は、

for r in len(rows): 
    if array[r, c-1] == 1: 
    store array[r,c] 

のようなものを書いた行を反復処理する必要はありません。

「フィルタ」が見つかりましたが、使用方法はわかりません(ドキュメントは見つかりませんでした)。

このような検索機能を備えていますか?

答えて

3

私はあなたの質問を正しく理解したと思います。あなたは、配列a

a = array(range(7)*3).reshape(7, 3) 
print a 
array([[0, 1, 2], 
     [3, 4, 5], 
     [6, 0, 1], 
     [2, 3, 4], 
     [5, 6, 0], 
     [1, 2, 3], 
     [4, 5, 6]]) 

を持っていて、最初のエントリは2あるすべての行を抽出したいとしましょう。これは次のように行うことができます。

print a[a[:,0] == 2] 
array([[2, 3, 4]]) 

a[:,0]が一致した後、私たちはそれぞれの行を抽出するためにadvanced indexingを使用するエントリをマークブール配列を返します== 2配列の最初の列を表します。

もちろん、NumPyはすべてのエントリを反復処理する必要がありますが、これはPythonで行うよりもはるかに高速です。

+0

これは私が望むものとほぼ同じです。私は最初のcoloumnが '2'である行を返すようにします。あなたの例では、array([[2,3,4]))だけを返します。 – Sebastian

+0

OK、私は私の答えを更新します。 –

+0

これは良いですか? –

0

ナンシーアレイは索引付けされません。この特定の操作を配列サイズの線形よりも効果的に実行する必要がある場合は、numpy以外のものを使用する必要があります。

+0

私は各行を見なければならないことを知っていますが、私はループでそれをしたくありません。ループよりも高速に処理できる組み込み関数があることを願っています。 – Sebastian

関連する問題