好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

为什么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实现的比。。 你用blas试试 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" 
  

查看更多关于为什么numpy的array那么快?的详细内容...

  阅读:47次