NumPy中针对数组(两个以上)逐元素取最大值的函数是什么?

40

我试图通过逐元素比较返回多个数组的最大值。例如:

A = array([0, 1, 2])
B = array([1, 0, 3])
C = array([3, 0, 4])

我希望得到的数组是array([3,1,4])

我想使用numpy.maximum,但它只适用于两个数组。是否有一个简单的函数可以用于超过两个数组?

3个回答

63

有了这个设置:

>>> 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])

我会选择第一个选项。


我会尝试从一开始就将数据保存在二维数组中,然后使用第二个选项。 - Sven Marnach
@SvenMarnach,axis参数最终调用了reduce,我不明白它为什么很重要。 - Daniel

19
你可以使用reduce。它会将一个二元函数反复应用于一组数值...
对于问题中给定的A、B和C...
np.maximum.reduce([A,B,C])

 array([3,1,4])

首先,它计算A和B的最大值,然后计算(np.maximum of A and B)和C的最大值。


1

你也可以使用:

np.column_stack([A, B, C]).max(axis=1)

这个结果与其他答案的解决方案相同。

我比较常使用Pandas而不是NumPy,所以对我来说,更容易把一维数组看作类似于Pandas Series。上面的代码等同于:

pd.concat([A, B, C], axis=1).max(axis=1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接