您现在的位置是:首页 > 文章详情

基于Python装饰器的向量化计算速度对比

日期:2018-07-12点击:343

timer是一个装饰器,功能是给被装饰的函数计时。如果要进一步了解装饰器的使用,点击此链接Python闭包函数和装饰器
sumOfLoop函数是常规的使用for进行循环遍历求和的方法;
sumOfComprehension函数使用推导式得出新的列表,然后用内置sum函数求出列表的和;
sumOfVectorization函数使用np.dot方法求出两个数据类型的为numpy.ndarray的对象的点积,两个向量a = [a1, a2,…, an]和b = [b1, b2,…, bn]的点积定义为:a·b=a1b1+a2b2+……+anbn
np.random.rand()方法需要传入一个参数,例如传入参数为5,则返回一个数据类型为numpy.ndarray、长度为5、其中元素的值范围为0-1的对象,如下图所示:

img_1b837785833937e571d8fe7e87f87295.png
np.random.rand()方法.png

from time import time import numpy as np def timer(func): def inner(*args,**kwargs): start = time() result = func(*args,**kwargs) end = time() usedTime = 1000 * (end - start) print("%s function used %.2f ms,return %.4f" %(func.__name__,usedTime,result)) return result return inner @timer def sumOfLoop(np_array): result = 0 for i in np_array: result += i * i return result @timer def sumOfComprehension(np_array): return sum([i * i for i in np_array]) @timer def sumOfVectorization(np_array): return np.dot(np_array,np_array) if __name__ == "__main__": print("计算小数平方和三种方法对比:") n = np.random.rand(3000000) a = sumOfLoop(n) print(a) sumOfComprehension(n) sumOfVectorization(n) print("计算整数平方和三种方法对比:") n = np.array(range(3000000)).astype('int64') sumOfLoop(n) sumOfComprehension(n) sumOfVectorization(n) 

本文作者在2018年7月13日晚11点的运行结果如下:

计算小数平方和三种方法对比:
sumOfLoop function used 1036.76 ms,return 999213.4882
sumOfComprehension function used 1103.75 ms,return 999213.4882
sumOfVectorization function used 2.00 ms,return 999213.4882
计算整数平方和三种方法对比:
sumOfLoop function used 545.89 ms,return 8999995500000499712.0000
sumOfComprehension function used 718.86 ms,return 8999995500000499712.0000
sumOfVectorization function used 5.00 ms,return 8999995500000499712.0000

原文链接:https://yq.aliyun.com/articles/649234
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章