為什麼numpy的array那麼快?

在python numpy中,如果我用10^6長度隨機生成的list生成numpy array,那麼生成耗時0.1s, 但是得到這個array的mean只需要init的2%的時間。 而我自己implement的array得到mean需要十幾秒。

所以numpy的array十分黑科技是應為:

1)用底層代碼太厲害?

2)init的時候partially compute了某一些中間量?(應為求mean的時間比access慢,比O(n)快 )

如果是2的話能否講一下大概思路(不需要用python O(n)就能得mean)?

感激不禁!


numpy的許多函數不僅是用C實現了,還使用了BLAS(一般Windows下link到MKL的,Linux下link到OpenBLAS)。基本上那些BLAS實現在每種操作上都進行了高度優化,例如使用AVX向量指令集,甚至能比你自己用C實現快上許多,更不要說和用Python實現的比。。


numpy底層使用BLAS做向量,矩陣運算。像求平均值這種vector operation,很容易使用multi-threading或者vectorization來加速。比如MKL就有很多優化。


a=[];s=0;n=1000000
from time import*
from math import*
from random import*
st=clock()
for i in range(n):
a.append(random())
for i in a:s=s+i
et=clock()
print "mean=",s/n,"time=",et-st,"seconds"

output

mean= 0.499693640227 time= 0.516563288987 seconds

好像沒有你說的那麼慢。


你用blas試試


推薦閱讀:

求較好的numpy scipy 資料推薦?

TAG:Python | C編程語言 | 數據結構 | 科學計算 | numpy |