Passing Numpy arrays to C code wrapped with Cython

后端 未结 2 829
心在旅途
心在旅途 2021-02-18 23:16

I have a small bit of existing C code that I want to wrap using Cython. I want to be able to set up a number of numpy arrays, and then pass those arrays as arguments to the C co

相关标签:
2条回答
  • 2021-02-19 00:09

    You probably want Cython's "typed memoryviews" feature, which you can read about in full gory detail here. This is basically the newer, more unified way to work with numpy or other arrays. These can be exposed in Python-land as numpy arrays, or you can export them to Python (for example, here). You have to pay attention to how the striding works and make sure you're consistent about e.g. C-contiguous vs. FORTRAN-like arrays, but the docs are pretty clear on how to do that.

    Without knowing a bit more about your function it's hard to be more concrete on exactly the best way to do this - i.e., is the C function read-only for the arrays? (I think yes based on the signature you gave, but am not 100% sure.) If so you don't need to worry about making copies if needed to get C-contiguous states, because the C function doesn't need to talk back to the Python-level numpy array. But typed memoryviews will let you do any of this with a minimum of fuss.

    0 讨论(0)
  • 2021-02-19 00:10

    The cython interface code should be created according to the tutorial given here.

    To get a C pointer to the data in a numpy array, you should use the ctypes attribute of the numpy array, which is described here.

    0 讨论(0)
提交回复
热议问题