1
在Simple wrapping of C code with cython的例子的numpy的网格评价C函数很好地描述如何评价用C语言编写从numpy的传递的阵列上的功能,并在numpy的阵列返回结果。使用用Cython
如何去做同样的事情,但返回一个二维数组?即我想评估一个由两个numpy数组定义的网格上的C函数,并将结果作为一个numpy二维数组返回。
这将是这样的(使用相同的功能,在上述的链接)。显然,一个不能使用双Z []现在,但我不知道如何将2D numpy的数组传递给C.
/* fc.cpp */
int fc(int N, const double a[], const double b[], double z[])
{
for(int i = 0; i < N; i ++){
for(int j = 0; j < N; j ++){
z[i][j] = somefunction(a[i],b[j]);
}
return N;
}
这是原来的.pyx文件(见下文)。
import numpy as np
cimport numpy as np
cdef extern from "fc.h":
int fc(int N, double* a, double* b, double* z) # z = a + b
def fpy(N,
np.ndarray[np.double_t,ndim=1] A,
np.ndarray[np.double_t,ndim=1] B,
np.ndarray[np.double_t,ndim=1] Z):
""" wrap np arrays to fc(a.data ...) """
assert N <= len(A) == len(B) == len(Z)
fcret = fc(N, <double*> A.data, <double*> B.data, <double*> Z.data)
return fcret
非常感谢。
感谢 - 这似乎是这样做的一个很好的方式。你有一个想法如何去传递> = 3维数组? –