次のような状況があります。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] などの一般的なサブセットを扱いますが、明確な開始 - 終了はありません。