np.sum
принимает параметр axis
, чтобы вы могли вычислить сумму, просто используя
sums3 = np.sum(x, axis=1)
Это намного быстрее, чем 2 метода, которые вы задали.
$ python -m timeit -n 1 -r 1 -s "import numpy as np;x=np.ones([100000,3])" "np.apply_along_axis(np.sum, 1, x)"
1 loops, best of 1: 3.21 sec per loop
$ python -m timeit -n 1 -r 1 -s "import numpy as np;x=np.ones([100000,3])" "np.array([np.sum(x[i,:]) for i in range(x.shape[0])])"
1 loops, best of 1: 712 msec per loop
$ python -m timeit -n 1 -r 1 -s "import numpy as np;x=np.ones([100000,3])" "np.sum(x, axis=1)"
1 loops, best of 1: 1.81 msec per loop
(Что касается того, почему apply_along_axis
медленнее - я не знаю, вероятно, потому что функция написана на чистом Python и гораздо более универсальна и, следовательно, имеет меньше возможностей для оптимизации, чем версия массива.)