2011-09-11 7 views
2

2つの列を持つ配列 'foo'があるとします。列0には、月を示す1〜12の値があります。列1は対応する測定値を有する。私は12月、1月と2月(12,1,2)からの測定値のマスクを作成したい場合は、私は私ができると思われるでしょう:numpy.where()で 'in'を使用する代わりに

numpy.where(foo[:,1] in (12, 1, 2), False, True) 

をしかし、それは(12、1の」私の巧妙なように思われます、2) 'はwhere()の条件として動作しません。 [12,1,2]などのようには動作しません。

これを行う別の巧妙な方法はありますか? (12、1、2)測定値のすべてをアレイに集めるより良い方法はありますか? numpyの方法は何ですか?

(各月の測定値の不規則な数があるので、配列を再形成することは問題外である)

答えて

4

I「の中で(12 1、2)」動作しない理由があることだと思います'in'の前の要素は単一の要素でなければなりません。

しかし、このために、numpyはnumpy配列で 'in'を実行する関数in1ddocumentation)を持っています。

np.where(np.in1d(foo[:,0], [12, 1, 2]), False, True) 

コメントで答えを完了するには:あなたのコードでは、この場合にwhereを使用して冗長で、in1dの出力は、インデックスfooのに使用することができます。

foo[np.in1d(foo[:,0], [12, 1, 2])] 

かについて

foo[~np.in1d(foo[:,0], [12, 1, 2])] 

注:in1dは、numpy 1.4以降でのみ使用できます。

+0

うん!私もこれでnp.where()は必要ありません!私はちょうどnp.in1d()を使用して必要なものを作成することができます ありがとう! – brews

+0

実際、np.in1dの出力を使ってfooを索引付けすることができます。 – joris

関連する問題