Hi,
Can someone please explain to me this oddity?
In [1]: import numpy as n
In [8]: a = n.array((1,2,3), 'i')
In [9]: type(a[0])
Out[9]:
2008/7/18 Suchindra Sandhu
Can someone please explain to me this oddity?
In [1]: import numpy as n
In [8]: a = n.array((1,2,3), 'i')
In [9]: type(a[0]) Out[9]:
There's more than one int32 type lying around. Rather, compare *dtypes*: In [19]: a.dtype == np.int32 Out[19]: True Regards Stéfan
Hi Stéfan,
Is that the recommended way of checking the type of the array? Ususally for
type checkin, I use the isinstance builtin in python, but I see that will
not work in this case. I must admit that I am a little confused by this. Why
is type different from dtype?
Thanks,
Suchindra
On Fri, Jul 18, 2008 at 7:10 PM, Stéfan van der Walt
2008/7/18 Suchindra Sandhu
: Can someone please explain to me this oddity?
In [1]: import numpy as n
In [8]: a = n.array((1,2,3), 'i')
In [9]: type(a[0]) Out[9]:
There's more than one int32 type lying around. Rather, compare *dtypes*:
In [19]: a.dtype == np.int32 Out[19]: True
Regards Stéfan _______________________________________________ Numpydiscussion mailing list Numpydiscussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpydiscussion
2008/7/21 Suchindra Sandhu
Is that the recommended way of checking the type of the array? Ususally for type checkin, I use the isinstance builtin in python, but I see that will not work in this case. I must admit that I am a little confused by this. Why is type different from dtype?
Datatypes contain additional information needed to lay out numerical
types in memory, such as byteorder and bitwidth. Each datatype has
an associated Python type, which tells you the type of scalars in an
array of that dtype. For example, here are two NumPy datatypes that
are not equal:
In [6]: d1 = np.dtype(int).newbyteorder('>')
In [7]: d2 = np.dtype(int).newbyteorder('<')
In [8]: d1.type
Out[8]:
On Mon, Jul 21, 2008 at 3:37 PM, Stéfan van der Walt
2008/7/21 Suchindra Sandhu
: Is that the recommended way of checking the type of the array? Ususally for type checkin, I use the isinstance builtin in python, but I see that will not work in this case. I must admit that I am a little confused by this. Why is type different from dtype?
Datatypes contain additional information needed to lay out numerical types in memory, such as byteorder and bitwidth. Each datatype has an associated Python type, which tells you the type of scalars in an array of that dtype. For example, here are two NumPy datatypes that are not equal:
In [6]: d1 = np.dtype(int).newbyteorder('>') In [7]: d2 = np.dtype(int).newbyteorder('<')
In [8]: d1.type Out[8]:
In [9]: d2.type Out[9]:
In [10]: d1 == d2 Out[10]: False
I don't know why there is more than one int32 type (I would guess it has something to do with the way types are detected upon build; maybe Robert or Travis could tell you more).
They correspond to two C types of the same size, int and long. On 64 bit systems you should have two int64 types, long and longlong. In [1]: dtype('i').name Out[1]: 'int32' In [2]: dtype('l').name Out[2]: 'int32' Chuck
Thanks Everyone.
On Mon, Jul 21, 2008 at 6:25 PM, Charles R Harris
On Mon, Jul 21, 2008 at 3:37 PM, Stéfan van der Walt
wrote: 2008/7/21 Suchindra Sandhu
: Is that the recommended way of checking the type of the array? Ususally for type checkin, I use the isinstance builtin in python, but I see that will not work in this case. I must admit that I am a little confused by this. Why is type different from dtype?
Datatypes contain additional information needed to lay out numerical types in memory, such as byteorder and bitwidth. Each datatype has an associated Python type, which tells you the type of scalars in an array of that dtype. For example, here are two NumPy datatypes that are not equal:
In [6]: d1 = np.dtype(int).newbyteorder('>') In [7]: d2 = np.dtype(int).newbyteorder('<')
In [8]: d1.type Out[8]:
In [9]: d2.type Out[9]:
In [10]: d1 == d2 Out[10]: False
I don't know why there is more than one int32 type (I would guess it has something to do with the way types are detected upon build; maybe Robert or Travis could tell you more).
They correspond to two C types of the same size, int and long. On 64 bit systems you should have two int64 types, long and longlong.
In [1]: dtype('i').name Out[1]: 'int32'
In [2]: dtype('l').name Out[2]: 'int32'
Chuck
_______________________________________________ Numpydiscussion mailing list Numpydiscussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpydiscussion
participants (3)

Charles R Harris

Stéfan van der Walt

Suchindra Sandhu