2017-10-21 13 views
0

配列:[[True], [False], [True]]があります。この配列で既存の配列をフィルタ処理する場合は、[[1,2],[3,4],[5,6]][[1,2],[5,6]]にフィルタリングする必要があります。これを行う正しい方法は何ですか?Numpyのフィルター配列

シンプルa[b]インデックスはエラーを与える:boolean index did not match indexed array along dimension 1; dimension is 2 but corresponding boolean dimension is 1

+3

'a [b.ravel()]'を使用してください。 – Divakar

+0

うわー。早かった。ありがとう。できます! :)あなたが1つを見つけると、この質問を重複して閉じるために投票してください。私はできませんでした –

答えて

1

解決策は、それが他のアレイの行のインデックスを作成するために動作するように、形状[True, False, True]に配列[[True], [False], [True]]を取得することです。 Divakarが言ったように、ravelはこれを行います。一般に、どのアレイも1Dアレイにフラット化します。ドキュメントから別のオプション...サイズ1で寸法を削除しますが、彼らがいたとして、他の寸法を残しsqueeze

1

使用.ravelある

ravelます:

Return a contiguous flattened array.

もしそうなら、私たちあなたのbarrayを持っている:

b = np.array([[True], [False], [True]]) 

我々はを取ることができますそのsub-arraysとのうちの値:

b.ravel() 

います:

array([ True, False, True], dtype=bool) 

をそれでは、我々は単にaするためのマスクとしてb.ravel()を使用することができ、それはあなたが望むように動作します:

a = np.array([[1,2], [3,4], [5,6]]) 
b = np.array([[True], [False], [True]]) 

c = a[b.ravel()] 

これは、cとして:

array([[1, 2], 
     [5, 6]])