【发布时间】:2014-07-03 14:01:45
【问题描述】:
我正在编写一个 python 程序,使用 DLL 的一些外部功能。 我的问题是将矩阵(python 中的 numpy 数组)传入和传出 C 代码,现在我使用以下代码从 DLL 接收数据:
peak_count = ct.c_int16()
peak_wl_array = np.zeros(512, dtype=np.double)
peak_pwr_array = np.zeros(512, dtype=np.double)
res = __dll.DLL_Search_Peaks(ctypes.c_int(data.shape[0])
ctypes.c_void_p(data_array.ctypes.data),
ctypes.c_void_p(peak_wl_array.ctypes.data),
ctypes.c_void_p(peak_pwr_array.ctypes.data),
ct.byref(peak_count))
它就像一个魅力,但我的问题是 numpy 分配速度 - 即使没有调用 DLL(刚刚评论)我有 每 100`000 次调用 3.1 秒。
它只是用 np.zeros() 分配并用 ctypes.c_void_p(D.ctypes.data) 获取可写指针
我需要每秒处理大约 20`000 个调用,所以几乎所有时间都花在分配内存上。
我考虑过 cython,但它不会加速 numpy 数组,所以我不会获得任何利润。
是否有更快的方法从 C 编写的 DLL 接收类似矩阵的数据。
【问题讨论】:
标签: python c performance numpy