On Fri, Feb 16, 2024 at 12:40 AM Marten van Kerkwijk <m...@astro.utoronto.ca> wrote:
> > 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)`. > Also note that np.sum does a bunch of work *in pure Python*. Some of that Python code is really bad too, using `_wrapreduction` which has weird semantics (trying `getattr(x, 'sum')` for any object) that we could/should remove and that currently make the function even slower. The large gap in performance has little to do with functions vs. methods, more like the method being implemented in C and not having to defer to the function, rather than the other way around. Cheers, Ralf > 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 > _______________________________________________ > NumPy-Discussion mailing list -- numpy-discussion@python.org > To unsubscribe send an email to numpy-discussion-le...@python.org > https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ > Member address: ralf.gomm...@gmail.com >
_______________________________________________ NumPy-Discussion mailing list -- numpy-discussion@python.org To unsubscribe send an email to numpy-discussion-le...@python.org https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ Member address: arch...@mail-archive.com