Numpy argmax函数工作原理:为何输出[0,0,0]与[2,2,2,2]?
理解NumPy中argmax函数的输出
嘿,我完全懂你的困惑!你之前用sum函数时,它确实返回的是沿指定轴计算的求和结果,但np.argmax的功能和它有着本质区别——它返回的是最大值所在的位置(索引),而不是最大值本身,这就是你看到输出全是0和2的原因!
先回顾一下你的数组:
import numpy as np x = np.array([[12,11,10,9],[16,15,14,13],[20,19,18,17]])
打印出来是:
[[12 11 10 9] [16 15 14 13] [20 19 18 17]]
为什么np.argmax(x, axis=1)返回[0 0 0]?
当指定axis=1时,argmax会沿着每一行单独查找最大值的索引:
- 第一行
[12,11,10,9]的最大值是12,它在这一行的第0个位置(Python索引从0开始计数),所以返回0; - 第二行
[16,15,14,13]的最大值是16,同样在第0个位置,返回0; - 第三行
[20,19,18,17]的最大值是20,还是在第0个位置,返回0;
最终结果就是[0 0 0]。
为什么np.argmax(x, axis=0)返回[2 2 2 2]?
当指定axis=0时,argmax会沿着每一列单独查找最大值的索引:
- 第一列
[12,16,20]的最大值是20,它在这一列的第2个位置(对应数组的第三行,索引从0开始),所以返回2; - 第二列
[11,15,19]的最大值是19,在第2个位置,返回2; - 第三列
[10,14,18]的最大值是18,在第2个位置,返回2; - 第四列
[9,13,17]的最大值是17,在第2个位置,返回2;
最终结果就是[2 2 2 2]。
补充:如果想获取最大值本身怎么办?
如果你想要得到沿轴的最大值(而不是索引),可以使用np.max()函数:
np.max(x, axis=1)会返回[12 16 20],也就是每一行的最大值;np.max(x, axis=0)会返回[20 19 18 17],也就是每一列的最大值。
内容的提问来源于stack exchange,提问作者user859385




