[Numpy-discussion] Mapping of dtype to C types

Sturla Molden sturla at molden.no
Wed May 11 14:52:07 EDT 2011


Den 09.05.2011 15:58, skrev Keith Goodman:
> On Mon, May 9, 2011 at 1:46 AM, Pauli Virtanen<pav at iki.fi>  wrote:
>> Sun, 08 May 2011 14:45:45 -0700, Keith Goodman wrote:
>>> I'm writing a function that accepts four possible dtypes: int32, int64,
>>> float32, float64. The function will call a C extension (wrapped in
>>> Cython). What are the equivalent C types? int, long, float, double,
>>> respectively? Will that work on all systems?
>> Long can be 32-bit or 64-bit, depending on the platform.
>>
>> The types available in Numpy are listed here, including
>> the information which of them are compatible with which C types:
>>
>> http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html
>>
>> The C long seems not to be listed -- but it's the same as
>> "Python int", i.e., np.int_ will work.
>>
>> IIRC, the Numpy type codes, dtype.kind, map directly to C types.
> Does this mapping look right?
>

No.

C int is at least 16 bits, C long is at least 32 bits.

The size of long and size of int depend on compiler and platform.

I'd write a small Cython function and ask the C compiler for an 
authorative answer.

Alternatively you could use ctypes. This is 64-bit Python on Windows:

 >>> import ctypes
 >>> ctypes.sizeof(ctypes.c_long)
4
 >>> ctypes.sizeof(ctypes.c_int)
4



Sturla











More information about the NumPy-Discussion mailing list