2016-08-24 11 views
0

私は2次元のnumpy配列matrix(shape(m、n))を持っています。と、ファンシーインデクシングnumpy行列:1行に1要素

matrix = np.arange(5*3).reshape((5, 3)) 

I形状(M)の整数のインデックス付け配列、IDXを有する:私の実際のユースケースは、M〜1E5およびn〜100を有しているが、単純な最小の例を有するため[0、n]の間の各エントリ。この配列は、行列の各行から選択する列を指定します。

idx = np.array([2, 0, 2, 1, 1]) 

だから、私はこのように、行4から行1、列1から行2、列1から行1、列2から行0、列0から列2を選択するために、最終的な答えは必要がありますしようとしています:

correct_result = np.array((2, 3, 8, 10, 13)) 

私は直感的である、以下を試してみましたが、間違っています

incorrect_result = matrix[:, idx] 

何上記の構文はありませんが、別の結果として、行によって、ファンシーインデックス列、行としてIDXを適用しています形状行列(m、n)、それは私が望むものではありません。

このタイプのファンシーインデックスの正しい構文は何ですか?

+0

ありがとう@Divakar、これは確かに同じ質問です。私の検索でなぜそれが聞こえないのか分かりません。 – aph

+1

明らかにSOの検索エンジンはそれほど素晴らしいものではありません。ですから、私がしていることの一つは、キーワードに 'site:stackoverflow.com'を追加してgoogle検索をすることです。 – Divakar

+0

ヒントをいただきありがとうございます。 – aph

答えて

3
correct_result = matrix[np.arange(m), idx] 

高度なインデックス式matrix[I, J]output[n] == matrix[I[n], J[n]]、このような出力を提供します。

我々はoutput[n] == matrix[n, idx[n]]をしたい場合は、次に我々はI[n] == nJ[n] == idx[n]を必要とするので、私たちはidxするnp.arange(m)JするIを必要としています。

関連する問題