基于Python装饰器的向量化计算速度对比
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的对象,如下图所示:
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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
DVWA的配置问题
这是继上一篇关于DVWA的安装之后的另一个问题的出现 我们在按照网上的一系列教程进行安装之后可能会出现: DVWA System error - config file not found. Copy config/config.inc.php.dist to config/config.inc.php and configure to your environment. 中文大意就是:DVWA系统错误——找不到配置文件。请复制config目录下的config.inc.php.dist文件 到 config目录下的config.inc.php文件,并配置你的环境。 以及登陆错误的问题,无法连接的问题 这些都是一个问题就是需要: ,就是 在config目录下,将config.inc.php.dist后面的.dist后缀去掉,使它成为一个PHP文件。我先复制粘贴一个原文件,如图,1为原文件,2 为副本 并且把那个副本更改一下后缀名(php)就可以了 最后就会出现你想要的结果: http://127.0.0.1/DVWA/setup.php 很开森呀!! 虽然过程有点麻烦,但是自己尝试...
-
下一篇
正则表达式应用二
求一C#正则,获取HTML文本中id或者name为“formhash”的value值 例子: <inputid="formhash"></input> <divname="formhash"></div> 正则为 <\w*\s(id|name)="formhash"></\w*>
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL数据库在高并发下的优化方案