好的,所以我用Python包装了一个C库并调用了相应的DLL。然后我创建了一个打印出所有数据点的for循环。 这是我的代码和我包装的库的一小部分示例:
ptrArr[i]->c = intArr[i];
这是我在Python中创建的for循环:
import ctypes
from ctypes import *
class ParmData(Union):
_fields_ = [
('c', ctypes.POINTER(ctypes.c_ubyte)),
('f', ctypes.POINTER(ctypes.c_float))]
class SParm(Structure):
pass
SParm._fields_ = [
('data', ctypes.POINTER(ParmData)),
('time', ctypes.POINTER(ctypes.c_float))]
dll.readSParm.argtypes = (POINTER(SFile), c_char_p, c_double, c_double, c_double, POINTER(TTag), c_ushort,)
dll.readSParm.restype = POINTER(SParm)
g = dll.readSParm(SF, ParmName, startTime, stopTime, Null, None, convertType)
dll.freeSParm(g)
哪里
for i in range(0, 50000):
print(i, (g[0].data[0].f[i]), (g[0].time[i]))
是指向包含所有数据的对象的指针。
for循环的结果看起来像第二列是数据,第三列是该数据的相应时间值:
(g[0].data[0].f)
(g[0].time)
如何将这些数据转换为numpy数组?因为我有这么多的数据点,所以我无法输入它们。
答案 0 :(得分:0)
一种肮脏(但简单)的方法就是迭代数据并随时填充数组,如下所示:
data_len = 5000 #<- you should have a way of knowing how much data there is
arr = np.empty([data_len,2],dtype=np.float) #empty array of the right size
for i in range(data_len): #we fill the array row by row
arr[i,:]= (g[0].data[0].f[i],g[0].time[i])
print(arr)