我有一些具有以下声明的 C 代码:
int myfunc(int m, int n, const double **a, double **b, double *c);
So a
是一个常量二维数组,b
是一个二维数组,并且c
是一个一维数组,全部动态分配。b
and c
在传递给之前不需要特别指定任何内容myfunc
,应该理解为输出信息。出于这个问题的目的,我无权更改声明myfunc
.
问题一:如何转换给定的 numpy 数组a_np
到一个数组中a
具有此 C 函数所需的格式,以便我可以在 Cython 中调用此 C 函数a
?
问题2:声明是否为b
and c
下面是正确的,还是它们需要采用其他格式才能让 C 函数将它们理解为 2D 和 1D 数组(分别)?
我的尝试:
myfile.pxd
cdef extern from "myfile.h":
int myfunc(int p, int q, const double **a, double **b, double *c)
mytest.pyx
cimport cython
cimport myfile
import numpy as np
cimport numpy as np
p = 3
q = 4
cdef:
double** a = np.random.random([p,q])
double** b
double* c
myfile.myfunc(p, q, a, b, c)
然后在 iPython 中我运行
import pyximport; pyximport.install()
import mytest
与定义相关的线a
给我错误消息Cannot convert Python object to 'double **'
。我没有收到任何有关的错误消息b
or c
,但由于我此时无法运行 C 函数,所以我不确定b
and c
编写正确(即,以使得 C 函数能够分别输出 2D 和 1D 数组的方式)。
其他尝试:我也尝试过遵循解决方案here https://stackoverflow.com/a/25972568/2944305,但这不适用于我在中的双星号类型的数组myfunc
宣言。解决方案here https://stackoverflow.com/a/20938498/2944305不适用于我的任务,因为我无法更改的声明myfunc
.