Thanks, True, clip does get faster, but threshold is around 10k on my PC.
Also, can’t get __array_wrap__ to work. The arguments it receives after __iadd__ are all post-operation. Decided not to do it this way this time so not to hardcode such functionality into the class, but if there is a way to robustly achieve this it would be good to know. Regards, dg > On 10 Mar 2024, at 18:43, Ralf Gommers <ralf.gomm...@gmail.com> wrote: > > > > On Sun, Mar 10, 2024 at 9:14 AM Dom Grigonis <dom.grigo...@gmail.com > <mailto:dom.grigo...@gmail.com>> wrote: > Much thanks! > > Another related question while I am at it. It says clip is supposed to be > faster than np.maximum(mp.minumum(arr, max), min). However: > a = np.arange(100) > %timeit a.clip(4, 20) # 8.48 µs > %timeit np.maximum(np.minimum(a, 20), 4) # 2.09 µs > Is this expected? > > Make sure that you're not benchmarking with very small arrays (2 us is on the > order of function call overhead) and that the timing are reproducible. `clip` > is more efficient: > > >>> %timeit np.clip(a, 4, 20) > 70 µs ± 304 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each) > >>> %timeit np.clip(a, 4, 20) > 72.8 µs ± 161 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each) > >>> %timeit np.maximum(np.minimum(a, 20), 4) > 742 µs ± 8.45 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each) > > Ralf > > > > Regards, > dg > > >> On 10 Mar 2024, at 09:59, Ralf Gommers <ralf.gomm...@gmail.com >> <mailto:ralf.gomm...@gmail.com>> wrote: >> >> >> >> On Sat, Mar 9, 2024 at 11:23 PM Dom Grigonis <dom.grigo...@gmail.com >> <mailto:dom.grigo...@gmail.com>> wrote: >> Hello, >> >> Can't find answer to this anywhere. >> >> What I would like is to automatically clip the values if they breach the >> bounds. >> >> I have done a simple clipping, and overwritten __iadd__, __isub__, >> __setitem__, … >> >> But I am wandering if there is a specified way to do this. Or maybe at least >> a centralised place exists to do such thing? E.g. Only 1 method to override? >> >> That centralized method is `__array_wrap__`; a subclass that implements >> `__array_wrap__` by applying `np.clip` and then returning self should do >> this I think. >> >> Cheers, >> Ralf >> _______________________________________________ >> NumPy-Discussion mailing list -- numpy-discussion@python.org >> <mailto:numpy-discussion@python.org> >> To unsubscribe send an email to numpy-discussion-le...@python.org >> <mailto:numpy-discussion-le...@python.org> >> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ >> <https://mail.python.org/mailman3/lists/numpy-discussion.python.org/> >> Member address: dom.grigo...@gmail.com <mailto:dom.grigo...@gmail.com> > > _______________________________________________ > NumPy-Discussion mailing list -- numpy-discussion@python.org > <mailto:numpy-discussion@python.org> > To unsubscribe send an email to numpy-discussion-le...@python.org > <mailto:numpy-discussion-le...@python.org> > https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ > <https://mail.python.org/mailman3/lists/numpy-discussion.python.org/> > Member address: ralf.gomm...@googlemail.com > <mailto:ralf.gomm...@googlemail.com> > _______________________________________________ > NumPy-Discussion mailing list -- numpy-discussion@python.org > <mailto:numpy-discussion@python.org> > To unsubscribe send an email to numpy-discussion-le...@python.org > <mailto:numpy-discussion-le...@python.org> > https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ > <https://mail.python.org/mailman3/lists/numpy-discussion.python.org/> > Member address: dom.grigo...@gmail.com <mailto:dom.grigo...@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