沿轴的Numpy最大值

7

我有点不理解这里的问题。在以下片段中,我会期望np.max会返回[0, 4]...

>>> a
array([[1, 2],
       [0, 4]])

>>> np.max(a, axis=0)
array([1, 4])

感谢您提供的任何指导。
1个回答

7

看起来您想要包含最大值的行,是吗?

max(axis=0) 分别返回 [1,0] 和 [2,4] 的最大值。

没有轴参数的 argmax 在扁平化形式下找到整个数组的最大值。为了将该索引转换为行号,我们必须使用 unravel_index

In [464]: a.argmax()
Out[464]: 3
In [465]: np.unravel_index(3,(2,2))
Out[465]: (1, 1)
In [466]: a[1,:]
Out[466]: array([0, 4])

或者用一个表达式:
In [467]: a[np.unravel_index(a.argmax(), a.shape)[0], :]
Out[467]: array([0, 4])

从答案的长度可以看出,这不是通常意义上沿着/在轴上求最大值的定义。 numpy数组中的沿轴求和可能会更好地解释“沿轴”的含义。相同的定义适用于summeanmax操作。
===================
要选择具有最大norm的行,首先计算normnorm以相同的方式使用axis参数。
In [537]: np.linalg.norm(a,axis=1)
Out[537]: array([ 2.23606798,  4.        ])
In [538]: np.argmax(_)
Out[538]: 1
In [539]: a[_,:]
Out[539]: array([0, 4])

1
啊...我一直以为max()返回最大的行/列(按元素的平方和来衡量)。谢谢。 - samirbajaj
我添加了使用 norm 对行进行排名的示例。 - hpaulj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接