Comparing an array of arrays element-wise and shallow to None

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Comparing an array of arrays element-wise and shallow to None

Martin Gfeller
This post has NOT been accepted by the mailing list yet.
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=nump
y.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.

Is there a cleaner, efficient way to do an element-wise (but shallow) comparison?

Thank you and best regards,
Martin Gfeller, Swisscom
Loading...