【发布时间】:2014-03-16 00:03:36
【问题描述】:
我试图在逐元素比较中返回多个数组的最大值。例如:
A = array([0, 1, 2])
B = array([1, 0, 3])
C = array([3, 0, 4])
我希望结果数组为array([3,1,4])。
我想使用numpy.maximum,但它只适用于两个数组。有两个以上数组的简单函数吗?
【问题讨论】:
我试图在逐元素比较中返回多个数组的最大值。例如:
A = array([0, 1, 2])
B = array([1, 0, 3])
C = array([3, 0, 4])
我希望结果数组为array([3,1,4])。
我想使用numpy.maximum,但它只适用于两个数组。有两个以上数组的简单函数吗?
【问题讨论】:
你也可以使用:
np.column_stack([A, B, C]).max(axis=1)
结果与其他答案的解决方案相同。
我比 NumPy 更多地使用 Pandas,所以对我来说更容易将一维数组视为类似于 Pandas 系列的东西。以上将相当于:
pd.concat([A, B, C], axis=1).max(axis=1)
【讨论】:
您可以使用reduce。它重复地将二进制函数应用于值列表...
对于问题中给出的 A、B 和 C...
np.maximum.reduce([A,B,C])
array([3,1,4])
它首先计算A和B的np.maximum,然后计算(A和B的np.maximum)和C的np.maximum。
【讨论】:
使用此设置:
>>> A = np.array([0,1,2])
>>> B = np.array([1,0,3])
>>> C = np.array([3,0,4])
你可以这样做:
>>> np.maximum.reduce([A,B,C])
array([3, 1, 4])
或者:
>>> np.vstack([A,B,C]).max(axis=0)
array([3, 1, 4])
我会选择第一个选项。
【讨论】:
reduce,我不明白为什么重要。