python for循環優化

一、疑難雜症

  最近工作中遇到一個難題,優化一個項目的計算時間。最初,建立項目時用戶少,中間使用了for循環,還是嵌套的,共兩層,項目整體運行一次耗時1-2個小時。最近,隨着用戶量增長,項目耗時達到6-7個小時。顯然是不能接受的。

for t, w in user_tags:
        for it, w in tag_items[t]:
            ...some計算...

  上面的計算,外層x內層的次數大於60萬。於是,時間就長了。

二、原因分析

  原因很簡單就是用戶量大,for循環次數極大。當然,機器的性能可能也不高(ps:擴容機器要花錢的)。仔細看這一段代碼沒問題,邏輯正確,計算簡單。於是,冥思苦想,反覆嘗試。發現,這裏沒有使用任何python的數據結構。python作爲nb的科學計算語言,沒有發揮其長處。pandas、numpy、scipy等,沒有用上。

三、解決思路

  在梳理了for循環中的計算邏輯後,發現可以和pandas Dataframe的一些方法對應上。於是,就一頓利用pandas的groupby、apply、sort_values等操作,測試。最後,總的運行時間是2個小時左右,優化了到了30%的運行時間。
  其實,上面這個例子具有一定的個案性。但是,我想表達的意思是善用、巧用數據結構的力量。尤其是在現在大數據環境下,數據只會越來越多。比如,我的例子還可以進行numpy的矩陣乘法優化,估計會更節省時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章