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.k...@gmail.com> wrote: > On Mon, Jul 17, 2017 at 2:13 AM, <martin.gfel...@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@python.org > https://mail.python.org/mailman/listinfo/numpy-discussion >
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion