这是我目前正在做的,它有效,但它有点麻烦:
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()具有相同的绝对值,例如-5和5.如果您有偏好,只需相应地输入输入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)。
我正在寻找一种方法来获取沿指定轴的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)
这个快速计算绝对最大值 -axis以np.max与np.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() 。
我唯一能想到的,看起来更糟糕的是:
xmax=x[np.unravel_index(abs(x).argmax(), x.shape)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25151 次 |
| 最近记录: |