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維數組? –