On Mon, Nov 29, 2021 at 9:30 AM Sebastian Berg <sebast...@sipsolutions.net> wrote: > > On Thu, 2021-11-25 at 18:16 -0600, Juan Nunez-Iglesias wrote: > > I have to say I like this! Together with partial functions / toolz > > currying [1] it could make for some rather elegant code: > > > > result = gaussian_filter(image)[greater_than(t)] > > > > > On first sight, I am not yet convinced since we only save one line of > code. My main reason is that unlike pandas, NumPy never tried to make > method-chaining convenient. > Is this really very useful unless you also embrace method-chaining?
I think method-chaining is a misdirection. You run into this problem whenever you have a larger expression, whether it is made up of method calls or function calls or operators. I've run into this problem a lot, especially when working interactively. With that being said, personally I think assignment expressions solve this problem just fine, and are no more unreadable than a lambda. Aaron Meurer > > `arr.filter()` could also work, but likely we won't be able to easily > agree on adding another method. And if you are already currying, maybe > a small helper is almost as good? > > Cheers, > > Sebastian > > > > Juan. > > > > ..[1]: https://toolz.readthedocs.io/en/latest/curry.html > > > > On Wed, 24 Nov 2021, at 9:37 AM, cameron.pinne...@gmail.com wrote: > > > If you have an array built up out of method chaining, sometimes you > > > need to filter it at the very end. This can be annoying because it > > > means you have to create a temporary variable just so you can refer > > > to > > > it in the indexing square brackets: > > > > > > _temp = long_and_complicated_expression() > > > result = _temp[_temp >= 0] > > > > > > You could also use the walrus operator but this is odd looking and > > > it > > > still pollutes the namespace: > > > > > > result = (_temp := long_and_complicated_expression())[_temp >= 0] > > > > > > What I would like is to be able to use a lambda inside the indexing > > > square brackets, which would take the whole array as an argument > > > and > > > give a boolean array: > > > > > > result = long_and_complicated_expression()[lambda arr: arr >= 0] > > > > > > I should emphasize, the lambda gets the entire array as its > > > argument, > > > and returns an entire mask array of bools. It isn't like the `map` > > > and > > > `filter` builtins where it would call the python function once for > > > each > > > element and thus be slow. > > > > > > Pandas already has something similar[1]; you can pass a lambda into > > > `.loc[]` that takes a Series and returns a boolean indexer. > > > > > > [1] > > > https://pandas.pydata.org/pandas-docs/version/0.18.1/whatsnew.html#method-chaininng-improvements > > > _______________________________________________ > > > 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: j...@fastmail.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: sebast...@sipsolutions.net > > > > _______________________________________________ > 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: asmeu...@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