[Numpy-discussion] How to compare an array of arrays elementwise to None in Numpy 1.13 (was easy before)?

Eric Wieser wieser.eric+numpy at gmail.com
Mon Jul 17 13:52:30 EDT 2017


Here’s a hack that lets you keep using ==:

class IsCompare:
    __array_priority__ = 999999  # needed to make it work on either side of `==`
    def __init__(self, val): self._val = val
    def __eq__(self, other): return other is self._val
    def __neq__(self, other): return other is not self._val

a == IsCompare(None)  # a is None
a == np.array(IsCompare(None)) # broadcasted a is None

Eric
​

On Mon, 17 Jul 2017 at 17:45 Robert Kern <robert.kern at gmail.com> wrote:

> On Mon, Jul 17, 2017 at 2:13 AM, <Martin.Gfeller at swisscom.com> wrote:
> >
> > Dear all
> >
> > I have object array of arrays, which I compare element-wise to None in
> various places:
> >
> > >>> a =
> numpy.array([numpy.arange(5),None,numpy.nan,numpy.arange(6),None],dtype=numpy.object)
> > >>> a
> > array([array([0, 1, 2, 3, 4]), None, nan, array([0, 1, 2, 3, 4, 5]),
> None], dtype=object)
> > >>> numpy.equal(a,None)
> > FutureWarning: comparison to `None` will result in an elementwise object
> comparison in the future.
> >
> >
> > So far, I always ignored the warning, for lack of an idea how to resolve
> it.
> >
> > Now, with Numpy 1.13, I have to resolve the issue, because it fails with:
> >
> > ValueError: The truth value of an array with more than one element is
> ambiguous. Use a.any() or a.all()
> >
> > It seem that the numpy.equal is applied to each inner array, returning a
> Boolean array for each element, which cannot be coerced to a single Boolean.
> >
> > The expression
> >
> > >>> numpy.vectorize(operator.is_)(a,None)
> >
> > gives the desired result, but feels a bit clumsy.
>
> Wrap the clumsiness up in a documented, tested utility function with a
> descriptive name and use that function everywhere instead.
>
> --
> Robert Kern
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20170717/c9fb7978/attachment.html>


More information about the NumPy-Discussion mailing list