【发布时间】:2020-10-09 19:28:45
【问题描述】:
我目前正在使用导入到 python 的 C/C++ 函数,这要归功于 Dll 和 ctypes。在 DLL 中,我有一个以浮点 ** 变量作为参数的函数。这个参数被填充到函数中,我使用 ctypes 在 python 上得到它。
我有一个使用 2 个 for 循环的解决方案,但是当 2D 数组有很多点时,这会很慢。
你知道不用这些 for 循环的方法吗?
这是我的代码:
导出函数(DLL)的短版
unsigned short ClassExample::GetData(float **Samples)
{
for(long i = 0; i < rows; i++)
{
try
{
if(ch < NB_ROWS_MAX)
{
Samples[ch]][i] = this->Data[ch][i];
}
else
{
...
}
} ...
Python 代码
def GetSamples(self, ROWS, COLUMN):
Data = (ctypes.POINTER(ctypes.c_float) * ROWS)()
for i in range(COLUMN):
Data[i] = (ctypes.c_float * COLUMN)()
try:
succeed = lib._PyGetData(ClassExampleObj, ctypes.byref(Data))
if succeed != 0:
print("Error number :", succeed)
except:
print("Unknown Error")
Data_np = numpy.zeros((ROWS, COLUMN), dtype=float)
for i in range(ROWS):
for j in range(COLUMN):
Data_np[i, j] = float(Data[i][j])
return Data_np
谢谢!
【问题讨论】:
-
如果我理解你的话,你问如何让代码更有效率?
-
没错!我是 ctypes 和 dll 的初学者,所以我对此并不完全满意
标签: python c++ pointers dll ctypes