Объединить три numpy массива, сохранить наибольшее значение - PullRequest
3 голосов
/ 04 марта 2020

Я хочу объединить три 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 ]

6 голосов
/ 04 марта 2020

Вы можете попробовать объединить массивы вместе в дополнительном измерении с помощью метода Numpy np.dstack

и извлечь максимальное значение, указанное c, в добавленное измерение

# Stacking arrays together
d = np.dstack([a,b,c])
d.max(axis=2)

Out:

array([[1, 1, 1],
       [0, 2, 0],
       [1, 1, 1]])
3 голосов
/ 04 марта 2020

NumPy s np.ufunc.reduce позволяет применить функцию кумулятивно вдоль заданной оси. Мы можем просто объединить массивы и уменьшить их с помощью numpy.maximum, чтобы сохранить накопленный элементный максимум:

np.maximum.reduce([a,b,c])

array([[1, 1, 1],
       [0, 2, 0],
       [1, 1, 1]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...