2013-10-01 11 views

答えて

1

あなたがitertools.ifilterを使用することができます。

from itertools import ifilter 
c = np.array([ e for e in ifilter(lambda x: x[1] in b, a) ]) 
>> array([[3,4], 
      [5,6], 
      [7,4]]) 
+6

これは、大きなアレイでは非常に遅いです。 NumPy配列を扱うときは、ベクトル化されたイディオムが望ましいでしょう。 –

+1

OPは大きな配列を使用していますか? Big Dataで作業することなく、Numpyを広く使用しています。 – lucasg

2

[xについてxと、4,6(であればX [1]に)]あなたが言及した場合のためにそれを行う必要があります。

編集:@georgeslが示唆しているように、文字列に対してnumpy.matメソッドを使用するのではなく、配列の作成中にイテレータを正しく使用することが理想的です。

+0

georgeslの答えと同じ反対意見:NumPyのベクトル化操作を使用しないため、これは不必要に遅くなります。 –

+0

larsmansこのような操作に最適化されていないことについての有効な懸念事項である限り、@ georgeslのコメントが有効なので有効です。 OPは、大きなアレイの使用について明示的に指示していません。 – techiev2

2

あなたは行うことができます:あなたはまた、論理演算子orため|を使用することができます

check = np.logical_or(a[:,1]==4, a[:,1]==6) 
c = a[check,:] 

check = (a[:,1]==4) | (a[:,1]==6) 
10

だろうこれを行うnumpythonic方法はin1dを使用するために、何かのように:

a[np.in1d(a[:, 1], b)] 
関連する問題