簡體   English   中英

如何將Numpy ND數組轉換為CFFI C ++數組並再次返回?

[英]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 

也:

如何將Numpy數組傳遞到cffi函數中以及如何將其取回?

https://gist.github.com/arjones6/5533938

謝謝@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM