為什麼矩陣計算比循環計算快了這麼多,numpy內的矩陣計算是用的什麼機制,怎麼遍歷每個值的?

http://www.zhihu.com/question/24529196


因為通常的數學庫,矩陣運算都是用BLAS、ATLAS之類的庫。這些庫中,矩陣運算都是優化過的(也就是說通常不會用兩層循環來計算矩陣乘法,具體的計算方法請參考源代碼)。

當然,還有更厲害的,就是底層調用CPU級別的運算指令。例如intel的MKL就是一個做高速浮點運算的庫,比直接編譯C語言還要快(10000x10000維的矩陣分解速度可以從10s級加速到0.1s級)。Windows下的Matlab和自己編譯的numpy都可以調用MKL,所以矩陣運算速度快得髮指。

因此,在有性能要求的應用中(例如互聯網公司的大規模機器學習框架,比如百度大腦),底層都是在CPU和GPU集群上重新編譯的數值計算庫。 @過擬合 曾說過,就算有商業間諜把百度大腦的代碼偷走了,他們也沒法用。因為不是項目組的人,連怎麼編譯這套代碼都不可能知道。


謝....邀....(題主感謝你,人生第一腰T.T)

就說說我剛查到的吧.....

首先numpy用了C語言來實現。相比python,所有的操作都快了許多。

其次,numpy的數組內都是相同大小的對象,這與python的list有很大不同,在內存中的定址numpy就比python直接多了。

我也不知道更多了╮(╯▽╰)╭


你按這個TogoBlas一步一步做。。。flame/how-to-optimize-gemm


推薦閱讀:

TAG:Python | numpy | 矩陣計算 |