【发布时间】:2022-11-19 20:51:47
【问题描述】:
我正在使用 ctypes 将数组指针传递给 dll,并返回指向在 dll 中使用 malloc 创建的双精度数组的指针。回到 Python 时,我需要一种快速的方法来将指针转换为数组或 Python 列表。
我可以使用这个 list comp,但它很慢,因为有 320,000 个数据点:
list_of_results = [ret_ptr[i] for i in range(320000)]
理想情况下,我会在 Python 中创建数组并将其传递给 dll,但我必须在 dll 中使用 malloc 创建它,因为这是一个动态数组,我事先不知道会有多少数据元素(尽管返回指针还返回数据元素的数量,所以我知道返回 Python 时有多少)——我使用 realloc 在 dll 中动态扩展数组大小;我可以将 realloc 与 Python 数组一起使用,但不能保证最后调用 free() 有效。
Here is the relevant Python code:
CallTest = hDLL.Main_Entry_fn
CallTest.argtypes = [ctypes.POINTER(ctypes.c_double), ctypes.c_int64]
CallTest.restype = ctypes.POINTER(ctypes.c_double)
ret_ptr = CallTest(DataArray, number_of_data_points)
list_of_results = [ret_ptr[i] for i in range(320000)]
所以我的问题是:将从 dll 返回的指针转换为 Python 列表或数组的最快方法是什么?上面显示的方法太慢了。
非常感谢。
【问题讨论】: