[Numpy-discussion] Mapping of dtype to C types

Olivier Delalleau shish at keba.be
Wed May 11 15:07:19 EDT 2011


2011/5/11 Sturla Molden <sturla at molden.no>

> 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
>
>
I think Keith's approach should work, as long as there is one C type listed
on the url you mention that corresponds to your four dtypes.
Something like (not tested at all):

map = {}
for dtype in ('int32', 'int64', 'float32', 'float64'):
  for ctype (N.byte, N.short, N.intc, N.long.long, ...): # List all
compatible C types here
    if N.dtype(ctype) == dtype:
       map{dtype} = ctype
       break
assert len(map) == 4

-=- Olivier
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20110511/57451dc6/attachment.html>


More information about the NumPy-Discussion mailing list