我有以下情况。让我们定义一个 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]中的索引。结果应该是 z=2,它对应于值 58,然而,返回的值是 z=1,它是值 58 的位置,但是在矩阵 D[a,j] 中。
[[32]
[58]
[22]
[51]]
执行此过程时,我需要相对于原始矩阵 (D) 的索引。任何想法?我已经看到了一些方法,但我认为应该存在一些简单的方法来做到这一点?
请注意,它与此问题不同,因为行的子集并不总是 [1,2,3] 或 [5,6,7]。我的示例解决了一个通用子集,例如,[2,7,3,4] 没有明确的开始 - 结束。