作者yungyuc (酷狗喵千代)
看板Python
標題Re: [閒聊] 人急造反,狗急跳牆
時間Tue Oct 30 03:40:45 2007
※ 引述《Lucemia (生の直感、死の予感)》之銘言:
: 我喜好去選擇寫幾個好用的固定function (也許看起來難懂)
: 但能讓整體的coding style變的更簡單易懂,也減少coding 時發生的錯誤。
還有另一種狀況也會不得不寫難懂的碼。
Python 的迴圈令人絕望地慢。當然,這是和 C/Fortran code 來比。
幸好有 numpy 出現,讓 Python 也有了夠快的數值分析操作。
不過為了讓 Python/numpy 寫出來的程式夠快,
除了得放手讓 numpy 浪費一堆記憶體之外,還得寫 vectorized code。
vectorizd code 和迴圈版相比難懂得多,但沒有辦法。
因為 Python 的 function call 很貴,所以這種碼還得出現一大堆,
不能包在 function 裡面。
說到底,程式語言究竟只是解決問題的方法。
漂亮的語言提供比較好的手段來解決問題,不過,
如果一心害拍把手弄髒,很多問題就解決不了了。
為了能在同一個 script 檔裡同時進行模擬、分析和畫圖,
我願意忍受一下 vectorized code 的不便,
換來不必 explicitly compile external module 和
不必 call external plot program 的方便 (茶
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 164.107.239.65
1F:噓 yoco315:不知道為什麼這篇口氣好差.. 人家只是分享東西而已 10/31 08:34
2F:推 huggie:看不出噓點在哪? 10/31 16:20
3F:推 snowangel:不懂一樓在噓什麼+1... 10/31 20:48
4F:推 Lucemia:一樓應該是噓錯 10/31 23:24
5F:推 Tiberius:敢問能不能舉一些 vectorized code 加速的範例? XD 11/02 00:07
6F:→ yungyuc:我的第一個噓 get! XD 11/02 18:35
7F:→ yungyuc:python -m timeit -s "import numpy" # 第一行都一樣 11/02 18:40
8F:→ yungyuc:"for d in numpy.arange(100,dtype=float): d**2" # loop 11/02 18:41
9F:→ yungyuc:10000 loops, best of 3: 155 usec per loop 11/02 18:41
10F:→ yungyuc:"numpy.arange(100,dtype=float)**2" # vector 11/02 18:42
11F:→ yungyuc:100000 loops, best of 3: 7.43 usec per loop 11/02 18:42
12F:→ yungyuc:雖然不知道 numpy 有沒有用到 SIMD (CPU vector) 11/02 18:43
13F:→ yungyuc:但僅是把 loop 從 python 換進 numpy,就會差這麼多 11/02 18:44