基本上,我想对任意维的Numpy数组和指定任意轴执行以下Python等效操作:
max(array, key=abs)
即,基于最大绝对值选择元素(类似于array.max(axis=axis)
仅沿特定轴选择最大值的方式)
例如(absmax
是所需的函数):
array = np.array([
[ 5, 8, 2],
[-7, 3, 0],
[-2, -4, -1],
])
absmax(array, axis=0) # [-7, 8, 2]
absmax(array, axis=1) # [ 8, -7, -4]
我提出了以下实现,但感觉相当笨拙:
def absmax(a, *, axis):
dims = list(a.shape)
dims.pop(axis)
indices = np.ogrid[tuple(slice(0, d) for d in dims)]
argmax = np.abs(a).argmax(axis=axis)
indices.insert((len(a.shape) + axis) % len(a.shape), argmax)
return a[tuple(indices)]
因此,我想知道是否有更好/更简洁的方法来实现此功能
在搜索紧凑性时,这里有一个保持昏暗的-
样本运行-
如果额外的昏暗外观让人感到困扰,请在输出中添加重塑步骤:
示例在同一输入数组上运行-
也许更简单的方法是使用
np.take_along_axis()
实现接受lambda_max()
参数的key
函数:这可以按如下方式使用:
相关问题 更多 >
编程相关推荐