3

行列「A」の各行の最大値の同じインデックスで配列「B」の値を抽出したいと考えています。インデックスを見つけるには、次のように numpy 関数「numpy.argmax」を使用します。

>>> A=numpy.asarray([[0,1,6],[3,2,4]]);A
array([[0, 1, 6],
       [3, 2, 4]])
>>> argA=numpy.argmax(A,axis=1);argA
array([2, 2])

問題は、「argA」を使用して配列「B」の値を抽出する方法がわからないことです

4

3 に答える 3

4

の各エントリはargA、対応する行内の最大値のインデックス位置に対応します。行は ( を使用しているため) 明示的ではありませんaxis=1が、各エントリのインデックスに対応しています。したがって、目的の要素を取得するには、それらを追加する必要があります。

>>> A[[0,1], argA]
array([6, 4])

そう:

>>> B
array([[ 9,  8,  2],
       [ 3,  4,  5]])
>>> B[[0,1], argA] = 84,89
>>> B
array([[ 9,  8, 84],
       [ 3,  4, 89]])

使用を一般化するには:

>>> B[np.arange(A.shape[0]),argA]
于 2012-07-03T14:32:03.983 に答える
0

配列をインデックスとして直接使用できます。これは実際には次のように簡単です。

B[:, arga]

例えば:

>>> A[:,argA]
array([[6, 6],
       [4, 4]])
于 2012-07-03T13:07:15.250 に答える
0

これは少し非効率に見えるかもしれませんが、以下を使用できます。

A.take(argA, axis=1).diagonal()

代わりにA.take使用できますA[:, argA]take、軸についてより明示的です。

ravel_multi_indexフラットインデックスに変換するために使用できます:

A.take(np.ravel_multi_index((np.arange(len(argA)), argA), A.shape))
于 2012-07-03T13:17:23.257 に答える