2014-01-31 118 views
2

我正在用python寫一個小玩具模擬器。當然,這種模擬很慢。據我瞭解,python代碼很慢的主要原因是python是在解釋性語言中。我不想放棄python,因爲清晰的語法和可用的庫顯着縮短了寫入時間。那麼是否有一種簡單的方法可以「編譯」我的Python代碼?我可以通過編譯來改進python運行時嗎?

編輯

我回答一些問題: 是的,我使用numpy的。它大大簡化了代碼,我不認爲我可以提高自己編寫函數的性能。我爲所有列表使用numpy,並將所有的珠子加在一起。即。我祈求

pos += V*dt + forces*0.5*dt**2 

其中 '' 正 '', 'V' 和 '力量' 是(2000,3)的所有np.array尺寸。 我很確定力量計算中的緩慢部分。這是合乎邏輯的,因爲我必須遍歷所有的粒子並檢查它們的位置。對於我的真實項目(博士學位),我的代碼大致具有相同的複雜程度,而且我知道這是很昂貴的東西。

+0

是它可以編譯,http://docs.python.org/2/library/py_compile.html。 – Gjordis

+3

你在計算中使用'numpy'嗎?你也可以嘗試[PyPy](http://pypy.org/),這是一個比用C寫的「默認」更快的python解釋器。 –

+0

也取決於模擬,它可能適合使用numpy。 – U2EF1

回答

1

Python是一個稍微奇怪的語言,因爲它是解釋和編譯。很好。運行時,它被編譯爲「.pyc」字節碼 - 因此我們可以很快陷入語義細節。地獄我甚至不知道我剛剛說的是否嚴格準確。但在這一天結束時,你想加快速度所以......

  1. 首先,使用the profilertimeit工作了,所有的時間會
  2. 其次,重寫你的純Python代碼以提高慢位你已經發現
  3. 第三,看看它是如何去當optimised
  4. 現在,就要看你的情況,但認真思考
  5. 好吧,試試rewriting those slow sections in C++「我可以在一個更大的CPU /內存運行」
  6. 螺絲,它的所有C++編寫

如果你弄到最後一個選項我敢說,你擰和儲蓄不會是顯著。

+0

Python沒有什麼「奇怪」 - 如果不是大多數編程語言的工作原理:源代碼被解析並轉換爲字節碼,然後執行......有時字節碼是特定於計算機的,在這種情況下,我們將結果稱爲本地二進制*,有時結果需要字節碼解釋器,虛擬機*。 – miraculixx

+0

@miraculixx lols總是有一個。 –

+0

那麼,分析我的代碼,我知道我調用了''numpy.zeros'' sh * $次加載(實際的''cProfile''輸出),其中''cumtime''爲5.69秒(?) 78.108秒。所以如果有什麼可以減少的話,現在它就在那裏。我可以通過手動進行改進嗎?我不這麼認爲,因爲''percall''的值是0 – Yotam

相關問題