2017-07-13 214 views
0

好吧,所以我已經用Python包裝了一個C庫並調用了相應的DLL。然後我創建了一個打印出所有數據點的for循環。 這裏是我的代碼的小樣本,我已經包裹庫:for循環值到一個numpy數組

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循環,我在Python創建:

for i in range(0, 50000): 
print(i, (g[0].data[0].f[i]), (g[0].time[i])) 

(g[0].data[0].f) 
(g[0].time) 

是指向包含所有數據的對象的指針。

for循環這個樣子的第二列的結果是數據,三是該數據對應的時間價值:

2 -4864024.0 -1027.21630859375 
3 5.114739e-43 -1026.21630859375 
4 2.840103e-37 -1025.21630859375 
5 2.250064e-38 -1024.21630859375 

我的問題是這樣的:

哪有我將這些數據變成一個numpy數組?因爲我有這麼多的數據點,我不能在把它全

回答

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) 
+0

這工作,謝謝。好奇你爲什麼認爲它很髒? –

相關問題