[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