将for循环值转换为numpy数组

时间:2017-07-13 19:36:52

标签: python arrays numpy for-loop

好的,所以我用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数组?因为我有这么多的数据点,所以我无法输入它们。

1 个答案:

答案 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)