Greg Ewing wrote: > "Phillip J. Eby" <pje at telecommunity.com>: > > >>For the numeric use cases, frankly I don't see why one would want to >>apply short-circuiting boolean operators to arrays, since presumably >>the values in them have already been evaluated. And if the idea is >>to make them *not* be short-circuting operators, that seems to me to >>corrupt the whole point of the logical operators versus their >>bitwise counterparts. > > > There's more to it than short-circuiting. Consider > > a = array([42, ""]) > b = array([(), "spam"]) > > One might reasonably expect the result of 'a or b' to > be > > array([42, "spam"]) > > which is considerably different from a bitwise operation. Another example from numarray land. You can pick out subarrays, by indexing with an array of booleans, which can be pretty slick. >>> import numarray as na >>> a = na.arange(9) >>> a[a < 4] array([0, 1, 2, 3]) You would like a[2 < a < 4] to work, but instead you need: >>> a[(2 < a) & (a < 4)] Gregs proposal could fix this. Or suppose you want to find the logical and of a, b. Consider trying to use bitwise ops: >>> a = na.array([1,1,1,1]) # all true >>> b = na.array([2,2,2,2]) # all true >>> a & b array([0, 0, 0, 0]) # oops, that's why there's logical_and >>> na.logical_and(a,b) array([1, 1, 1, 1], type=Bool) >>> (a!=0) & (b!=0) # this also works, but it does 3x as much work array([1, 1, 1, 1], type=Bool) Again with Greg's proposal one could write 'a and b' for this. Much nicer. It's not that you couldn't make numarrays short circuit. In the expression "a and b", if all the elements of a are false, then we can skip evaluating b. I'm just not sure that this is a good idea. -tim
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4