[Numpy-discussion] PyArray_AsCArray (cfunction, in Array API) in Numpy User Guide
Takafumi Arakaki
aka.tkf at gmail.com
Mon Sep 21 03:07:02 EDT 2009
Hi,
I wrote sample code and it works fine.
This is my code, in case anyone else want to know how to use it:
#include <Python.h>
#include "structmember.h"
#include <numpy/arrayobject.h>
static PyObject *
print_a1(PyObject *dummy, PyObject *args)
{
npy_intp dims[3]; /* PyArray_AsCArray is for ndim <= 3 */
int typenum;
int i, nd;
PyObject *o1;
double *d1;
PyArray_Descr *descr;
if (PyArg_ParseTuple(args, "O:print_a1", &o1) < 0) {
PyErr_SetString( PyExc_TypeError, "bad arguments");
return NULL;
}
nd = PyArray_NDIM(o1);
typenum = NPY_DOUBLE;
descr = PyArray_DescrFromType(typenum);
if (PyArray_AsCArray(&o1, (void *)&d1, dims, nd, descr) < 0){
PyErr_SetString( PyExc_TypeError, "error on getting c array");
return NULL;
}
printf("[%d] ", dims[0]);
for (i = 0; i < dims[0]; ++i){
printf("%.2f ", d1[i]);
}
printf("\n");
printf("if ( ((PyArrayObject *)o1)->data == d1): ");
if ( ((PyArrayObject *)o1)->data == (char *)d1){
printf("True\n");
}else{
printf("False\n");
}
if (PyArray_Free(o1, (void *)&d1) < 0){
PyErr_SetString( PyExc_TypeError, "PyArray_Free fail");
return NULL;
}
return Py_BuildValue(""); /* return None */
}
static PyMethodDef module_methods[] = {
{"print_a1", (PyCFunction)print_a1, METH_VARARGS, ""},
{NULL} /* Sentinel */
};
#ifndef PyMODINIT_FUNC /* declarations for DLL import/export */
#define PyMODINIT_FUNC void
#endif
PyMODINIT_FUNC
initaca(void)
{
(void) Py_InitModule("aca", module_methods);
import_array(); /* required NumPy initialization */
}
Thanks,
Takafumi
More information about the NumPy-Discussion
mailing list