Вот способ, которым вы могли бы векторизовать его:
arr = np.array([[1, 2, 3],[3, 1, 4],[1, 3, 2]])
arr_A = np.roll(arr, 1, axis=0)
arr_B = np.roll(arr, 1, axis=1)
max_val = np.maximum(arr_A, arr_B)
output = arr + max_val
>>> [[4 5 5]
[7 4 7]
[4 4 6]]
Обратите внимание, что это дает другой ответ на ваш код выше, потому что то, как вы его написали, означает, что значения обновляются после каждого цикла.Если вы хотите этого, то вы привязаны к использованию циклов for
.
>>> [[ 4 6 9] # Output after updating the matrix in each loop.
[ 7 8 13]
[ 8 11 15]]
Если вы ищете алгоритм подобного типа, а не пытаетесь восстановить этот точный вывод, тогда np.roll()
должно работатьчтобы ускорить процесс.