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

Robert Kern robert.kern at gmail.com
Mon Jul 17 12:44:47 EDT 2017


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20170717/53294113/attachment.html>


More information about the NumPy-Discussion mailing list