On Mon, Jan 12, 2015 at 12:14 PM, Maniteja Nandana <
[email protected]> wrote:

> Hi,
>
> On Tue, Jan 13, 2015 at 12:03 AM, Alexander Belopolsky <[email protected]>
> wrote:
>
>> Consider this (on a 64-bit platform):
>>
>> >>> numpy.dtype('q') == numpy.dtype('l')
>> True
>>
>>
> >>> numpy.dtype('q').char == numpy.dtype('l').char
>> False
>>
>> Is that intended?  Shouldn't dtype constructor "normalize" 'l' to 'q' (or
>> 'i')?
>>
>>
> 'q' is defined as NPY_LONGLONGLTR, while 'l' is NPY_LONGLTR [here]
> <https://github.com/numpy/numpy/blob/maintenance/1.9.x/numpy/core/include/numpy/ndarraytypes.h#L102>
>  .
> Similar issue was raised on Issue 5426
> <https://github.com/numpy/numpy/issues/5426#issuecomment-68942373>. Even
> I am not aware of the exact reason, but hope it helps.
> Also,
>
> >>> numpy.dtype('q').num
> 9
> >>> numpy.dtype('l').char
> 7
>

Numpy basically has two different type systems. The basic system is based
on C types -- int, long, etc. --
and on top of that there is a precision based system. The letters and
number versions are C, while the dtype equality is precision. That is to
say, in this case C long has the same precision as C long long. That varies
depending on the platform, which is one reason the precision nomenclature
came in. It can be confusing, and I've often fantasized getting rid of the
long type altogether ;) So it isn't exactly intended, but there is a
reason...

Chuck
_______________________________________________
NumPy-Discussion mailing list
[email protected]
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to