问题描述
我们可以计算 3 个 numpy 数组的元素最大值:
import numpy as np
A = np.arange(20).reshape((4,5)) # any 4x5 array
B = np.maximum(A,A+7,A+2) # working
但是为什么 np.maximum
不接受来自“解包”的多个数组?
L = [np.roll(A,k,axis=0) for k in range(4)] # 4 arrays: A shifted with different k
np.maximum(*L)
错误:
ValueError: 参数数量无效
毕竟,L
是一个 Numpy 数组对象的 Python 列表,所以 *L
应该为 np.maximum
函数调用解压它。为什么它不起作用?
PS:我也尝试过使用 L = (...)
(提供生成器)或 L = tuple(...)
,但我们遇到了同样的错误。
解决方法
正如评论中指出的,reduce
是这里的解决方案:
np.maximum.reduce([np.roll(A,k,axis=0) for k in range(4)])