合并三个NumPy数组,保留最大值。

6
我想合并三个numpy数组,例如:
a = np.array([[0,0,1],[0,1,0],[1,0,0]])
b = np.array([[1,0,0],[0,1,0],[0,0,1]])
c = np.array([[0,1,0],[0,2,0],[0,1,0]])

a = array([[0, 0, 1],
           [0, 1, 0],
           [1, 0, 0]])

b = array([[1, 0, 0],
           [0, 1, 0],
           [0, 0, 1]])

c = array([[0, 1, 0],
           [0, 2, 0],
           [0, 1, 0]])


期望的结果是在叠加它们的同时保留最大值,其中多个元素不为0,就像在中间一样。
array([[1, 1, 1],
       [0, 2, 0],
       [1, 1, 1]])

我通过迭代所有具有多个 if 条件的元素来解决了这个问题。是否有一种更简洁、更优美的方式来做到这一点?
2个回答

8
你可以尝试使用Numpy np.dstack方法将数组叠加到额外的维度中,并提取特定于添加维度的最大值。
# Stacking arrays together
d = np.dstack([a,b,c])
d.max(axis=2)

输出:

array([[1, 1, 1],
       [0, 2, 0],
       [1, 1, 1]])

7
NumPy的np.ufunc.reduce函数可以沿着指定的轴累积应用一个函数。我们可以将数组串联起来,然后使用numpy.maximum函数进行缩减,以保留逐元素累积的最大值。
np.maximum.reduce([a,b,c])

array([[1, 1, 1],
       [0, 2, 0],
       [1, 1, 1]])

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