[英]How do I convert a numpy ND-array to a CFFI C++ array and back again?
我想通過CFFI將numpy數組傳遞給某些(其他的)C ++代碼。 假設我不能(從任何意義上)更改其接口為的C ++代碼:
double CompactPD_LH(int Nbins, double * DataArray, void * ParamsArray ) {
...
}
我將Nbins作為python整數傳遞,將ParamsArray作為dict->結構傳遞,但是DataArray(shape = 3 x NBins,需要從一個numpy數組填充,這讓我很頭疼。(cf_ 為什么要快得多的cast_matrix比numpy?在這里沒有幫助:(
這是一次失敗的嘗試:
from blah import ffi,lib
data=np.loadtxt(histof)
DataArray=cast_matrix(data,ffi) # see https://stackoverflow.com/questions/23056057/why-is-cffi-so-much-quicker-than-numpy/23058665#23058665
result=lib.CompactPD_LH(Nbins,DataArray,ParamsArray)
作為參考,cast_matrix是:
def cast_matrix(matrix, ffi):
ap = ffi.new("double* [%d]" % (matrix.shape[0]))
ptr = ffi.cast("double *", matrix.ctypes.data)
for i in range(matrix.shape[0]):
ap[i] = ptr + i*matrix.shape[1]
return ap
也:
謝謝@morningsun!
dd=np.ascontiguousarray(data.T)
DataArray = ffi.cast("double *",dd.ctypes.data)
result=lib.CompactPD_LH(Nbins,DataArray,ParamsArray)
作品!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.