了解argmax

时间:2016-03-30 05:22:31

标签: python

假设我有矩阵

import numpy as np    
A = np.matrix([[1,2,3,33],[4,5,6,66],[7,8,9,99]])

我试图理解函数argmax,据我所知它返回最大值

如果我在Python上尝试过:

np.argmax(A[1:,2])

我应该获得第二行中的最大元素,直到行的末尾(第三行)和第三列?所以它应该是数组[6 9],而arg max应该返回9?但是为什么当我在Python上运行它时,它会返回值1?

如果我想在第3列(即9)中从第2行开始返回最大元素,我应该如何修改代码?

我已经检查了Python文档,但仍然有点不清楚。感谢您的帮助和解释。

4 个答案:

答案 0 :(得分:19)

argmax返回位置最大值。 max返回最大值。

import numpy as np    
A = np.matrix([[1,2,3,33],[4,5,6,66],[7,8,9,99]])

np.argmax(A)  # 11, which is the position of 99

np.argmax(A[:,:])  # 11, which is the position of 99

np.argmax(A[:1])  # 3, which is the position of 33

np.argmax(A[:,2])  # 2, which is the position of 9

np.argmax(A[1:,2])  # 1, which is the position of 9

答案 1 :(得分:1)

attached: function() { var event = new Event('custom-element-attached'); window.dispatchEvent(event); } 是一个函数,它给出给定行或列中最大数字的索引,并且可以使用argmax函数的轴属性来决定行或列。如果我们提供argmax,那么它将从列中提供索引,如果我们给出axis=0,那么它将从行中提供索引。

在您给出的示例axis=1中,它将首先从wards的第1行获取值,并从这些行中获取唯一的第2列值,然后它将在结果矩阵中找到最大值的索引。

答案 2 :(得分:0)

花了我一段时间才能弄清楚这个功能。基本上,argmax返回您数组中最大值的 index 。现在,数组可以是一维或多维。以下是一些示例。

1维

a = [[1,2,3,4,5]]
np.argmax(a)
>>4

数组是一维的,因此该函数只返回数组中最大值(5)的索引,即4。

多个维度

a = [[1,2,3],[4,5,6]]
np.argmax(a)
>>5

在此示例中,数组是二维的,形状为(2,3)。由于在函数中未指定轴参数,因此numpy库将数组展平为一维数组,然后返回最大值的索引。在这种情况下,数组将转换为[[1,2,3,4,5,6]],然后返回索引6(即5)。

当参数为axis = 0

a = [[1,2,3],[4,5,6]]
np.argmax(a, axis=0)
>>array([1, 1, 1])

这里的结果起初让我有些困惑。由于将轴定义为0,因此函数现在将尝试沿着矩阵的行查找最大值。最大值6在矩阵的第二行中。第二行的索引为1。根据文档https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.argmax.html,将删除axis参数中指定的尺寸。由于原始矩阵的形状为(2,3)并且轴指定为0,因此返回矩阵将具有(3,)的形状,因为原始形状(2,3)中的2被删除了。现在,对于与原始矩阵中的列相同数量的元素,重复其中找到最大值的3。

当参数为axis = 1

a = [[1,2,3],[4,5,6]]
np.argmax(a, axis=1)
>>array([2, 2])

与上面的概念相同,但是现在返回列的索引,在该索引处可以使用最大值。在此示例中,最大值6在第3列的索引2中。形状为(2,3)的原始矩阵的列将被删除,转换为(2,),因此返回数组将显示两个元素,每个元素显示在其中找到最大值的列的索引。

答案 3 :(得分:0)

在python的第一步中,我已经测试了此功能。这个示例的结果阐明了 argmax 的工作方式。

示例

# Generating 2D array for input 
array = np.arange(20).reshape(4, 5) 
array[1][2] = 25

print("The input array: \n", array) 

# without axis
print("\nThe max element: ", np.argmax(array))
# with axis
print("\nThe indices of max element: ", np.argmax(array, axis=0)) 
print("\nThe indices of max element: ", np.argmax(array, axis=1)) 

结果示例

The input array: 
[[ 0  1  2  3  4]
[ 5  6 25  8  9]
[10 11 12 13 14]
[15 16 17 18 19]]

The max element:  7

The indices of max element:  [3 3 1 3 3]

The indices of max element:  [4 2 4 4]

在该结果中,我们可以看到3个结果。

  1. 所有数组中的最高元素位于位置7。
  2. 每列的最高元素在索引为3的最后一行中,除了第三列的最高值在索引为1的第二行中。
  3. 每一行的最高元素位于索引为4的最后一列中,除了第二行的最高值位于索引为2的第三列中。

参考: https://www.crazygeeks.org/numpy-argmax-in-python/

希望对您有帮助。