0

次のような状況があります。D (8,4) 行列を定義しましょう:

import numpy as np
import random

D=np.matrix([[72 22 58 63]
            [28 22 32 20]
            [40 41 58 20]
            [22 58 22 41]
            [28 78 51 45]
            [58 61 28 71]
            [51 22 28 51]
            [22 63 54 22]])

ランダムな列を設定しましょう:

j=np.random.choice(range(4))

この値を空のリスト Sp に保存します。

Sp=[]
Sp.append(j)

この列の行列 D の最大値のインデックスを決定したいと思います。

z=D[:,j].argmax(axis=0)

これまでのところ、すべて正常に動作しています。ここで、同じプロセスを実行したいのですが、列 j に対する行列 D の行のサブセットに対してだけです (簡単にするために、固定したままにします)。私はこれを試しました

j=2                      #COLUMN.
a=[1,2,3,4]              #SUBSET OF ROWS TO CHECK.
z=D[a,j].argmax(axis=0)

問題は、返されるインデックスが、行列 D の要素に対応する人ではなく、行列 D[a,j] のインデックスであることです。結果は、値 58 に対応する z=2 になるはずですが、返された値は z=1 でした。これは、行列 D[a,j] 内の値 58 の位置です。

[[32]
 [58]
 [22]
 [51]]

このプロセスを行うときは、元の行列 (D) に対するインデックスが必要です。何か案が?私はいくつかのアプローチを見てきましたが、これを行う簡単な方法が必要だと思いますか?

行のサブセットが常に [1,2,3] または [5,6,7] であるとは限らないため、この質問と同じではないことに注意してください。私の例では、[2,7,3,4] などの一般的なサブセットを扱いますが、明確な開始 - 終了はありません。

4

2 に答える 2