I'm guessing you could use Cython to make this easier. It's usually used for calling C from Python, but can do the sandwich in both directions...

Just a thought -- it will help with some of that boilerplate code...

-CHB




On Tue, Jan 30, 2018 at 10:57 PM, Jialin Liu <jalnliu@lbl.gov> wrote:
Amazing! It works! Thank you Robert.

I've been stuck with this many days. 

Best,
Jialin
LBNL/NERSC

On Tue, Jan 30, 2018 at 10:52 PM, Robert Kern <robert.kern@gmail.com> wrote:
On Wed, Jan 31, 2018 at 3:25 PM, Jialin Liu <jalnliu@lbl.gov> wrote:
Hello, 
I'm extending C with python (which is opposite way of what people usually do, extending python with C), I'm currently stuck in passing a C array to python layer, could anyone plz advise?

I have a C buffer in my C code and want to pass it to a python function. In the C code, I have:

npy_intp  dims [2];
dims[0] = 10;
dims[1] = 20; 
import_array();
npy_intp m=2;
PyObject * py_dims = PyArray_SimpleNewFromData(1, &m, NPY_INT16 ,(void *)dims ); // I also tried NPY_INT
PyObject_CallMethod(pInstance, method_name, "O", py_dims);
 
In the Python code, I want to just print that array:

def f(self, dims):

   print ("np array:%d,%d"%(dims[0],dims[1]))



But it only prints the first number correctly, i.e., dims[0]. The second number is always 0. 

The correct typecode would be NPY_INTP.

--
Robert Kern

_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org
https://mail.python.org/mailman/listinfo/numpy-discussion



_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org
https://mail.python.org/mailman/listinfo/numpy-discussion




--

Christopher Barker, Ph.D.
Oceanographer

Emergency Response Division
NOAA/NOS/OR&R            (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

Chris.Barker@noaa.gov