From my experience, calling methods is generally faster than functions. I figure it is due to having less overhead figuring out the input. Maybe it is not significant for large data, but it does make a difference even when working for medium sized arrays - say float size 5000.
%timeit a.sum() 3.17 µs %timeit np.sum(a) 5.18 µs
It is more that np.sum checks if there is a .sum() method and if so calls that. And then `ndarray.sum()` calls `np.add.reduce(array)`. In [2]: a = np.arange(5000.) In [3]: %timeit np.sum(a) 3.89 µs ± 411 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each) In [4]: %timeit a.sum() 2.43 µs ± 42 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each) In [5]: %timeit np.add.reduce(a) 2.33 µs ± 31 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each) Though I must admit I'm a bit surprised the excess is *that* large for using np.sum... There may be a little micro-optimization to be found... -- Marten