如何在numpy矩阵中获得绝对值中的最高元素?

qed*_*qed 17 python numpy

这是我目前正在做的,它有效,但它有点麻烦:

x = np.matrix([[1, 1], [2, -3]])
xmax = x.flat[abs(x).argmax()]
Run Code Online (Sandbox Code Playgroud)

Joe*_*ron 28

您正在寻找的价值必须是x.max()或者x.min()您可以做到的

max(x.min(), x.max(), key=abs)
Run Code Online (Sandbox Code Playgroud)

这与aestrivex的解决方案类似,但可能更具可读性?请注意,这将返回最小值,x.min()并且x.max()具有相同的绝对值,例如-55.如果您有偏好,只需相应地输入输入max.


Léo*_*ard 10

最紧凑的方式可能是:

x_max = x.flat[np.abs(x).argmax()]  
Run Code Online (Sandbox Code Playgroud)

默认情况下,该.argmax()方法直接对展平数组进行操作(取自NumPy 文档)。所以该操作寻找n维数组的最大绝对值np.abs(x)


Mar*_*cek 6

我正在寻找一种方法来获取沿指定轴的N维数组的最大绝对值的有符号值,这些答案都不会处理.所以,我把一个函数放在一起做.没有承诺,但只要我测试它就可以了:

def maxabs(a, axis=None):
    """Return slice of a, keeping only those values that are furthest away
    from 0 along axis"""
    maxa = a.max(axis=axis)
    mina = a.min(axis=axis)
    p = abs(maxa) > abs(mina) # bool, or indices where +ve values win
    n = abs(mina) > abs(maxa) # bool, or indices where -ve values win
    if axis == None:
        if p: return maxa
        else: return mina
    shape = list(a.shape)
    shape.pop(axis)
    out = np.zeros(shape, dtype=a.dtype)
    out[p] = maxa[p]
    out[n] = mina[n]
    return out
Run Code Online (Sandbox Code Playgroud)


kxr*_*kxr 6

这个快速计算绝对最大值 -axisnp.maxnp.argmax他们自己相同的方式尊重任意参数。

def absmaxND(a, axis=None):
    amax = a.max(axis)
    amin = a.min(axis)
    return np.where(-amin > amax, amin, amax)
Run Code Online (Sandbox Code Playgroud)

对于长数组,它a.flat[abs(a).argmax()]甚至比简单情况快 2.5 倍axis=None- 因为它不呈现原始大数组的 abs() 。


Dan*_*iel 1

我唯一能想到的,看起来更糟糕的是:

xmax=x[np.unravel_index(abs(x).argmax(), x.shape)]
Run Code Online (Sandbox Code Playgroud)