如何将numpy nd-array转换为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 ) {
...
}
i通过python integer将nbins作为paramsarray作为dict->结构,但是dataArray(shape = 3 x nbins,需要从numpy阵列中填充的shape = 3 x nbins,这给了我头痛。(cast_matrix为什么cffi cfffi是为什么比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)
工作!
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 我似乎无法为指针分配一个数组,然后更改数组的内容
- 如何从文件中读取值,然后使用它们来初始化 2D 数组C++
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- 如何在C++中初始化值,然后稍后为uint32_t数组赋值
- 如何在类中制作 2D 数组元素,然后在其构造函数中指定其维度?
- 从文本文件中读取并输入到数组结构中,然后显示读取的数据C++
- 如何创建一个C++程序来读取字符串数组中的信息,然后将其排序到类中?
- 将 char[] 数组转换为字节,然后将字节转换为 int,反之亦然
- 从文件中读取并将其内容放入对象数组中,然后对它们进行排序
- C++ 如何创建 2D 数组,将其传递给另一个函数,然后打印
- 我正在编写一个代码来将 int 数组存储在文件中,然后用 c++ 检索它,但是检索第一项是假值,我该如何解决这个问题?
- 我的单例中的数组在离开函数后没有保留信息,然后在尝试再次访问信息时崩溃
- 按字母顺序排序字符数组,然后按长度排序
- 将2D数组传递到函数,然后将其乘以两个
- 将结构数组BYRE从C#传递到C ,然后将其恢复
- 如何发送(和接收)从 Swift 到 Objective c++ 再到 c++,然后备份到 Swift 的超大型浮动数组
- 创建对象数组然后有效删除它们的更好方法
- 如何从.txt文件复制单词到数组.然后将每个单词打印在单独的一行上