我有一个 C++ 回调函数,使用 ctypes 调用 Python。这个函数的参数是指向 double 数组和元素数量的指针。
这里有很多元素,大约有 2,000,000 个。我需要将其传递给 scipy 函数。
C++ 原型如下:
bool (*ptsetDataSource)(double*, long long);
以下是Python代码:
CPF_setDataSource = CFUNCTYPE(c_bool, POINTER(c_double),c_longlong)
CPF_setSelection= CFUNCTYPE(c_bool,c_char_p, c_longlong,c_longlong)
CPF_ResetSequence = CFUNCTYPE(c_bool)
def setDataSource(Data, DataLength):
Datalist=[0.0]*100
for i in range(0,100):
Datalist[i]=Data[i]
print Datalist
return True
问题在于print datalist返回的结果是:[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
当在C++端检查时,数据被填充了许多其他数字,这是不正确的。
另外,如果我使用此代码将数据转换为Python列表,则在分配步骤中会锁定计算机。
有没有办法从C++数组中加载数据,然后将其转换为适用于Scipy的数组?