[Numpy-discussion] dtype subarray comparison

Mark Wiebe mwwiebe at gmail.com
Wed Oct 20 19:59:53 EDT 2010


It turns out that when comparing dtypes, the subarray is currently ignored.
 This means you can get things like this:

>>> import numpy as np
>>> np.dtype(('f4',(6))) == np.dtype(('f4',(2,3)))
True
>>> np.dtype(([('a','i4')],2)) == np.dtype(([('b','u2'),('c','i2')],2))
True

which pretty clearly should be False in both cases.  I've implemented a
patch to fix this, for which a pull request is here:

http://github.com/numpy/numpy/pull/6

The main points included in this patch are:

* If there's a subarray shape, it has to match exactly.
* Currently, sometimes the subarray shape was an integer, other times a
tuple.  The output formatting code checks for this and prints a tuple in
both cases.  I changed the code to turn the integer into a tuple on
construction instead.  This didn't cause any tests to fail, so I think it's
a safe change.
* The current code converts (type, 1) and (type, tuple()) to just type, so
this means (type, 1) != (type, (1,)) but (type, 2) == (type, (2,))  I put in
some tests of these edge cases.
http://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/descriptor.c#L234

Cheers,
Mark
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20101020/94293059/attachment.html>


More information about the NumPy-Discussion mailing list