为什么numpy的array那么快?
程序员文章站
2022-03-17 08:18:25
...
在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的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"
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
下一篇: PHP连接数据库