Я заметил, что очень странно, что np.sum в 10 раз медленнее, чем рукописная сумма.
np.sum с осью:
p1 = np.random.rand(10000, 2)
def test(p1):
return p1.sum(axis=1)
%timeit test(p1)
186 µs ± 4.21 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
np.sum без оси:
p1 = np.random.rand(10000, 2)
def test(p1):
return p1.sum()
%timeit test(p1)
17.9 µs ± 236 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
+:
p1 = np.random.rand(10000, 2)
def test(p1):
return p1[:,0] + p1[:,1]
%timeit test(p1)
15.8 µs ± 328 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Умножение:
p1 = np.random.rand(10000, 2)
def test(p1):
return p1[:,0]*p1[:,1]
%timeit test(p1)
15.7 µs ± 701 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
Я не вижу причин для этого. Есть идеи почему? Моя маленькая версия - 1.15.3
.
ОБНОВЛЕНИЕ: с 10000000:
np.sum (with axis): 202 ms (5 x)
np.sum (without axis): 12 ms
+ : 46 ms (1 x)
* : 44.3 ms
Так что я думаю, что в некоторой степени есть игра наверху...