gpt4 book ai didi

python - 将数组从 C 代码返回到 python

转载 作者:行者123 更新时间:2023-12-01 05:28:19 26 4
gpt4 key购买 nike

我有一个 3D 数组,我在 Python 中分配它并传递给我正在编写的类型为 double * 的库。在我的 C 代码中,我使用

动态创建一个单独的 3D 数组
double ***coords_mle = (double ***)malloc(num_coords*sizeof(double**));
for (i = 0; i < num_coords; i++) {
coords_mle[i] = (double **)malloc((end_frame-start_frame+1)*sizeof(double*));
for (j = 0; j < end_frame-start_frame+1; j++)
coords_mle[i][j] = (double *)malloc(2*sizeof(double)); }

并填充值。我动态创建数组,因为它取决于我的 python 代码中的参数。 C 库中的数组已正确填充。我尝试使用以下任一方法将数组返回到双 * 指针

std::copy(**coords_mle, **coords_mle + 2*3*3, coords_ret);或者memcpy(coords_ret, **coords_mle, 2*3*3*sizeof(double));

(2*3*3 是数组的维度)。然而,我在 python 中得到的只有一些我期望的值。数组的其余部分用其他数字填充。

使用 ctypes 将 3D 数组从 C 返回到 python 的最佳方法是什么?

最佳答案

实际上,我推荐 Cython。 Ctypes 在 python-C 边界上有点慢,而且也有点脆弱。我喜欢将 Ctypes 用于针对 CPython 和 Pypy 的多解释器代码,尽管今天也许 CFFI 会更好。

如果你真的想要 ctypes,你可以创建一个具有适当长度 (dimx*dimy*dimz) 的 array.array('d'),并通过 ctypes 将其传递给你的 C 代码。 array.array 应该创建连续的传统数组,因此它可能会起作用。

关于python - 将数组从 C 代码返回到 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20897469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com