2017-04-20 12 views
1

Iは、以下のnumpyの配列を有する: (NX1)の真理値表、およびマトリックス(nxk)nは5であり、kは、この例では2です。抽出ベクトル

btable = np.array([[True],[False],[False],[True],[True]]) 
bb=np.array([[1.842,4.607],[5.659,4.799],[6.352,3.290],[2.904,4.612],[3.231,4.939]]) 

btableのインデックス値に従ってベクトルをbbで抽出したいと思います。

私は結果

[ 1.84207953 2.90401653 3.23197916] 

choicebb=bb[btable]が同様に私に同じ結果を得るに私を取得されchoicebb=bb[btable==True]を試してみました。

私が代わりにしたいことはある

[[1.842,4.607]

[2.904,4.612]

[3.231,4.939]]私も試した

choicebb=bb[btable==True,:] 

その後私はなるだろう

---> 13 choicebb=bb[btable==True,:]

14 print(choicebb)

IndexError: too many indices for array

これは簡単にそうように、np.ravel()とマスクの1Dバージョンを取得または[:,0]で最初の列をスライスし、データ・アレイに論理的なインデックス付けのためにそれを使用choicebb=bb(btable,:);

+1

'btable'は' np.array([TRUE、FALSE、FALSE、TRUE、TRUE]) 'でなければなりません。私は 'マッチ=のようなコマンドを使用して、それを生成しています – Serenity

+0

(IDX == I)'、IDXは、KX1の配列である、と私は私の一致条件です。 – user2118915

答えて

1

とMathWorks社のMATLABで行うことができます -

bb[btable.ravel()] 
bb[btable[:,0]] 

bb[btable.ravel()]は、本質的には - bb[btable.ravel(),:]です。 NumPyでは、すべての要素を選択する必要がある場合は後続軸を省略することができます。そのため、bb[btable.ravel()]に簡略化されています。

Explanataion:単一軸へのインデックスと、それは軸の残りの部分に沿ってすべての要素を選択するようには、我々は、その軸に沿って1次元アレイ(ブールまたは整数アレイ)に供給し沿っ:を使用する必要が残りの軸。私たちのケースでは、行を選択するために、第一の軸にインデックス付けされているので、私たちは、軸の残りの部分に沿ってその軸と:に沿ってブール配列にフィードする必要があります。

マスクのバージョンを2Dにすると、対応する複数の軸に沿ってインデックスが付けられます。我々は(N,1)状ブール配列フィードときに、我々は正しい行を選択しているだけでなく、唯一意図出力されない最初の列要素を、選択します。

+0

ありがとう、これは動作します!すでにnx1アレイであるため、マスクの1Dバージョンを入手する必要性の背後にある論理について説明できますか? – user2118915

+0

@ user2118915コメントが追加されているかどうかを確認してください。 – Divakar

+0

私は今それを得る。ありがとう! – user2118915

関連する問題