我想知道如果有人能告訴我是否有更好/更快的方法從我的C程序中讀取數據,輸出兩個大小爲的文件列表。我正在使用來調用C程序。將ctypes數組轉換爲python列表的更快方法?
我在下面展示的循環通過迭代多次掃描來工作。對於每次掃描,生成兩個列表(msX, msY
)。通過使用列表理解循環提取c_float
數據。將mzP和mzI獲得的c_float_Array
轉換爲msX
和msY
有沒有更好/更快的方法?
for scan in xrange(nScans):
mzP = (c_float * nPoints)() # pointer to list 1, c_float_Array
mzI = (c_float * nPoints)() # pointer to list 2, c_float_Array
mlLib.readData(filePointer, 1, scan, byref(mzP), byref(mzI))
# The slow part...
msX = [mzP[i] for i in xrange(nPoints)] # list with mzP data
msY = [mzI[i] for i in xrange(nPoints)] # list with mzI data
讓我知道如果我的問題不清楚。 感謝您的幫助提前。
嘗試使用PyPy https://www.pypy.org與CPython的沒有什麼更快該列表理解。 –
'msX = mzP [:]'會比列表理解更快,但爲什麼你需要一個列表而不是直接使用ctypes數組?如果一個ctypes數組缺少一些你需要的方法,那麼'array.array'就足夠了?從'msX = array.array('f',[0])* nPoints'開始,可以通過'mzP =(c_float * nPoints).from_buffer(msX)'獲得一個ctypes數組。 – eryksun
感謝您的意見。我嘗試了你的第一個建議,這將運行時間減少到約。 45%,這很好。我會看看你的其他建議,看看它是否合適。謝謝! – munieq11