
2011/11/14 Robert Kern <robert.kern@gmail.com>
On Mon, Nov 14, 2011 at 20:18, MACKEITH Andrew <Andrew.MACKEITH@3ds.com> wrote:
Could someone explain this?
An instance of numpy.int32 is not an instance of int or numpy.int. An instance of numpy.int64 is an instance of int and numpy.int.
I don't know if it is a bug in my linux build.
import sys sys.maxint 9223372036854775807 import platform print platform.platform() Linux-2.6.32.12-0.7-default-x86_64-with-SuSE-11-x86_64
This is expected on a 64-bit platform. Note that numpy.int is just an alias for the builtin int type for backwards compatibility with an earlier version of numpy. We could probably remove it, since it seems to be causing more confusion than not.
Anyways, we subclass the appropriately sized integer scalar type from Python's int type depending on the platform. So on a platform where Python's int type is 64-bits, numpy.int64 will include int in its inheritance tree. On platforms where the Python int type is 32-bit, numpy.int32 will include it instead.
I'll just add that there is a numpy.integer class that is parent of both numpy.int32 and numpy.int64 (see http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html). It's not a parent of numpy.int though, since as said above, numpy.int is an alias to the builtin int. -=- Olivier