What Are The Rules For Comparing Numpy Arrays Using ==?
Solution 1:
NumPy tries to broadcast the two arrays to compatible shapes before comparison. If the broadcasting fails, False is currently returned. In the future,
The equality operator
==
will in the future raise errors like np.equal if broadcasting or element comparisons, etc. fails.
Otherwise, a boolean array resulting from the element-by-element comparison is returned. For example, since x
and np.array([1])
are broadcastable, an array of shape (10,) is returned:
In [49]: np.broadcast(x, np.array([1])).shape
Out[49]: (10,)
Since x
and np.array([[1,3],[2]])
are not broadcastable, False
is returned by x == np.array([[1,3],[2]])
.
In [50]: np.broadcast(x, np.array([[1,3],[2]])).shape
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-50-56e4868cd7f7> in <module>()
----> 1 np.broadcast(x, np.array([[1,3],[2]])).shape
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Solution 2:
It's possible that what's confusing you is that:
some broadcasting is going on.
you appear to have an older version of numpy.
x == np.array([[1],[2]])
is broadcasting. It compares x
to each of the first and second arrays; as they are scalars, broadcasting implies that it compares each element of x
to each of the scalars.
However, each of
x == np.array([1,2])
and
x == np.array([[1,3],[2]])
can't be broadcast. By me, with numpy
1.10.4, this gives
/usr/local/bin/ipython:1: DeprecationWarning: elementwise == comparison failed; this will raise an error in the future.
#!/usr/bin/pythonFalse
Solution 3:
Adding to unutbu's answer, arrays do not need to have the same number of dimensions. For example, dimensions with size 1 are stretched to match the other.
A (4d array): 8 x 1 x 6 x 1
B (3d array): 7 x 1 x 5Result (4d array): 8 x 7 x 6 x 5
A (2d array): 5 x 4
B (1d array): 1Result (2d array): 5 x 4
A (2d array): 5 x 4
B (1d array): 4Result (2d array): 5 x 4
A (3d array): 15 x 3 x 5
B (3d array): 15 x 1 x 5Result (3d array): 15 x 3 x 5
A (3d array): 15 x 3 x 5
B (2d array): 3 x 5Result (3d array): 15 x 3 x 5
A (3d array): 15 x 3 x 5
B (2d array): 3 x 1Result (3d array): 15 x 3 x 5
Post a Comment for "What Are The Rules For Comparing Numpy Arrays Using ==?"