I have put together a few c extensions following the documentation on http://www.scipy.org/Cookbook/C_Extensions/NumPy_arrays. There is however one thing that stumps me.
To illustrate with a simple code snippet, the test function below multiplies the input numpy double array by two. So far so good. But how about if I want the function to return a tuple of two numpy arrays so I could do 'a, b = myCLib.test(c)' from a Python script? It's straight forward to convert C data structures to Python objects with Py_BuildValue, but how can I do this for numpy arrays instead? static PyObject * test(PyObject *self, PyObject *args) { PyArrayObject *py_in, *py_out; double *in, *out; int i, n, dims[2]; if (!PyArg_ParseTuple(args, "O!", &PyArray_Type, &py_in)) return NULL; if (NULL == py_in || not_doublevector(py_in)) return NULL; n = py_in->dimensions[0]; dims[0] = n; dims[1] = 1; py_out = (PyArrayObject *) PyArray_FromDims(1, dims, NPY_DOUBLE); in = pyvector_to_Carrayptrs(py_in); out = pyvector_to_Carrayptrs(py_out); for (i=0; i<n; i++) { out[i] = in[i] * 2.0; } return PyArray_Return(py_out); }
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion