2017-04-12 112 views
0

我在python中得到了以下代碼,我想我需要一些優化它的幫助。
我正在閱讀數百萬行數據,但如果每行一個座標不符合我的標準,那麼會拋出大部分數據。
的代碼如下:Python快速數據讀入和切片

def loadFargoData(dataname, thlimit): 
    temp = np.loadtxt(dataname) 
    return temp[ np.abs(temp[:,1]) < thlimit ] 

我編寫它,彷彿它是C型代碼,當然在蟒蛇現在這是瘋狂緩慢。
我可以以某種方式拋出我的臨時對象嗎?或者Python的人可以幫助我進行哪些其他優化?

+0

可能是這個問題的重複:http://stackoverflow.com/questions/14645789/numpy-reading-file-with-filtering-lines-on-the-fly – Zefick

+0

@Zefick:感謝您的鏈接。事實上,如果可以構建像\ ge這樣的數學運算的正則表達式,那麼這將解決我的問題。那有可能嗎? – AtmosphericPrisonEscape

回答

1

包含在熊貓中的數據讀取器可能會加速您的腳本。它讀取比numpy更快。熊貓將產生一個數據框對象,易於查看作爲一個numpy數組(也很容易轉換,如果首選的話),所以你可以在numpy中執行你的條件(在你的問題中看起來足夠有效)。

import pandas as pd 

def loadFargoData(dataname, thlimit): 
    temp = pd.read_csv(dataname) # returns a dataframe 
    temp = temp.values   # returns a numpy array 
    # the 2 lines above can be replaced by temp = pd.read_csv(dataname).values 
    return temp[ np.abs(temp[:,1]) < thlimit ] 

你可能要檢查了大熊貓文件,瞭解您可能需要正確地讀取文件(頭,分離器等)函數的參數。

+0

對於遲到接受你的回答感到抱歉,我忙於另一個項目。實際上,熊貓讀者的作品非常棒,我的數據提高了15-16倍。 – AtmosphericPrisonEscape