组合两个numpy数组以形成每个数组中具有最大值的数组

时间:2015-02-26 12:25:38

标签: python arrays numpy max

我想组合两个numpy数组来生成一个数组,每个数组的值最大。

import numpy as np

a  = np.array([[ 0.,  0.,  0.5],
               [ 0.1,  0.5,  0.5],
               [ 0.1,  0.,  0.]])

b  = np.array([[ 0.,  0.,  0.0],
               [ 0.5,  0.1,  0.5],
               [ 0.5,  0.1,  0.]])

我想制作

array([[ 0.,  0.,  0.5],
       [ 0.5,  0.5,  0.5],
       [ 0.5,  0.1,  0.]])

我知道你可以做到

a += b

导致

array([[ 0. ,  0. ,  0.5],
       [ 0.6,  0.6,  1. ],
       [ 0.6,  0.1,  0. ]])

这显然不是我追求的目标。这似乎是一个容易出问题的问题,我认为最有可能是这样。

3 个答案:

答案 0 :(得分:6)

您正在寻找以元素为单位的最大值。

示例:

>>> np.maximum([2, 3, 4], [1, 5, 2])
array([2, 5, 4])

http://docs.scipy.org/doc/numpy/reference/generated/numpy.maximum.html

答案 1 :(得分:4)

您可以使用np.maximum来计算两个数组的元素最大值:

>>> np.maximum(a, b)
array([[ 0. ,  0. ,  0.5],
       [ 0.5,  0.5,  0.5],
       [ 0.5,  0.1,  0. ]])

这适用于任何两个数组,只要它们的形状相同或者另一个形状可以broadcast

要就地修改数组a,您可以将np.maximum的输出重定向回a

np.maximum(a, b, out=a)

还有np.minimum用于计算两个数组的元素最小值。

答案 2 :(得分:3)

inds =  b > a
a[inds] = b[inds]

这会修改原始数组a,这是+=在您的示例中所做的事情,可能是您想要的,也可能不是。