矩阵的最大值,最大元素的索引
问题描述:
请考虑Python 3.5中我的numpy矩阵的以下图片。 A是一个形状矩阵(35,50)。矩阵的最大值,最大元素的索引
含np.max(A)
回报最大的权值线,最大的确是2372在我的数据集。但是当我试图重现numpy的文件,如下所示:
https://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.argmax.html
我没有得到这样的相似文档中的结果的结果。所有的索引对都不相同。我尝试了第一个索引对:A[18][29]
,但它是具有值506的元素的索引,当时我认为这只会返回矩阵最大值的索引。这使我有2个问题:
如果这些指标对都不是矩阵的最大的指数,即
np.max(A)
,那么它们是什么?numpy是否有办法返回任何给定形状(我的形状为35,50)的矩阵内实际元素的索引?理想情况下,如果我输入:
A[row_index][column_index]
我想输出是价值等于np.max(A)
标元素,在我的情况下,该值将是2372
我也不清楚为什么它不工作的我期望它的方式,如果我不得不猜测,我会说它与数组中的数组有关,或者我只是没有使用正确的numpy扩展。
请指教,
谢谢
答
row_index
是最大的每一列,50列,50个指数的指数。
col_index
是每行最大值的索引,35个值。
在这两个数组中配对值没有意义。是的,其中的一对将成为整个数组max的索引,但您无法通过查看它们来判断。
========================
In [573]: x
Out[573]:
array([[15, 8, 6, 3, 4, 5],
[22, 1, 13, 10, 18, 7],
[21, 14, 20, 16, 9, 2],
[11, 12, 23, 19, 17, 0]])
In [574]: i0=np.argmax(x,axis=0)
In [575]: i1=np.argmax(x,axis=1)
In [576]: i0
Out[576]: array([1, 2, 3, 3, 1, 1], dtype=int32)
In [577]: i1
Out[577]: array([0, 0, 0, 2], dtype=int32)
为了获取最大价值,我们必须将这些指标与正确的结合形状为np.arange
。
In [578]: x[i0,np.arange(6)]
Out[578]: array([22, 14, 23, 19, 18, 7])
In [579]: x[np.arange(4),i1]
Out[579]: array([15, 22, 21, 23])
23
两个都存在,但不是在同一个索引
In [580]: np.argmax(x)
Out[580]: 20 # location in the flattened version of x
In [581]: x.flat[20]
Out[581]: 23
In [582]: x[i0[2], i1[3]] # (3, 2)
Out[582]: 23
要扁平索引转换成2D,使用:
In [583]: np.unravel_index(20,x.shape)
Out[583]: (3, 2)
In [584]: x[3,2]
Out[584]: 23
很好的解释,谢谢你对我的帮助看看这些numpy扩展应该如何工作 –