python 一些方法的时间测试
尝试一些方法的不同实现,比较一下时间,电脑比较渣,不过只是做个比较
虽然用python主要是方便,肯定是不快的,不过能快一点还是快一点好
numpy中大量使用同样 shape 的全 0 array,可以使用 np.zero() 方法或者是先开一个之后 copy:
%%time
for i in range(5000000):
a = np.zeros((100,10))
a = np.zeros((100,10))
a = np.zeros((100,10))
Wall time: 17.1 s
%%time
b = np.zeros((100,10))
for i in range(5000000):
a = b.copy()
a = b.copy()
a = b.copy()
Wall time: 15.1 s
貌似先开一个,之后copy比较快,不过差异不明显
range() 还是 np.arrange(),最近用 array 有点多,经常啥都开 array
%%time
for p in range(50000):
a = np.arange(100000)
Wall time: 3.72 s
%%time
for p in range(50000):
a = range(100000)
Wall time: 31 ms
差距还是非常明显(不用想都知道2333),如果不需要用 array 方法的时候,还是 list 好了
访问 list 等下标,用 range(长度),不过先保存长度成常量还是多次用 len 方法
%%time
a = np.arange(100000)
l = len(a)
for p in range(50000000):
range(l)
Wall time: 23.3 s
%%time
a = np.arange(100000)
for p in range(50000000):
range(len(a))
Wall time: 27.9 s
就这样看,应该调用 len 方法还是有点慢的,虽然差异也不是非常大,len 应该不是 O(n) 实现,可能是对象直接保存的一个属性,不过访问起来还是先存下来更快点
遍历一个 array ,同时使用标号
我会遍历下标长度的一个 list 来遍历它,用 zip 把标号和 array 合并,或者 emunerate ,或者干脆维护一个 id,循环中累加
%%time
for i in range(5000000):
a = np.arange(10,30)
l = len(a)
for id in range(l):
x = id+a[id]
Wall time: 50 s
%%time
for i in range(5000000):
a = np.arange(10,30)
b = zip(range(len(a)),a)
for item1,item2 in b:
x = item1+item2
Wall time: 51.2 s
%%time
for i in range(5000000):
a = np.arange(10,30)
c = enumerate(a)
for item1,item2 in c:
x = item1+item2
Wall time: 52.3 s
%%time
for i in range(5000000):
a = np.arange(10,30)
d = zip(np.arange(len(a)),a)
for item1,item2 in d:
x = item1+item2
Wall time: 52.9 s
%%time
for i in range(5000000):
a = np.arange(10,30)
id = 0
for item in a:
x = id+item
id += 1
Wall time: 1min 1s
看上去只有维护 id 累加最慢,其他都差别不太大,那只要条件允许大概还是按 C 的习惯开一个下标的 list 来遍历下标好了
python 一些方法的时间测试的更多相关文章
- python操作日期和时间的方法
不管何时何地,只要我们编程时遇到了跟时间有关的问题,都要想到 datetime 和 time 标准库模块,今天我们就用它内部的方法,详解python操作日期和时间的方法.1.将字符串的时间转换为时间戳 ...
- Python中日期和时间格式化输出的方法
本文转自:https://www.jb51.net/article/62518.htm 本文实例总结了python中日期和时间格式化输出的方法.分享给大家供大家参考.具体分析如下: python格式化 ...
- Python 魔术方法指南
入门 构造和初始化 构造定制类 用于比较的魔术方法 用于数值处理的魔术方法 表现你的类 控制属性访问 创建定制序列 反射 可以调用的对象 会话管理器 创建描述器对象 持久化对象 总结 附录 介绍 此教 ...
- Python Web 性能和压力测试 multi-mechanize
http://www.aikaiyuan.com/5318.html 对Web服务做Performance & Load测试,最常见的工具有Apache Benchmark俗称ab和商用工具L ...
- python基础教程总结14——测试
1. 先测试,后编码 对程序的各个部分建立测试也是非常重要的(这也称为单元测试).测试驱动编程:Test-driven programming 1)精确的需求说明: 程序设计的理念是以编写测试程序开始 ...
- Python标准库02 时间与日期 (time, datetime包)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python具有良好的时间和日期管理功能.实际上,计算机只会维护一个挂钟时间(wa ...
- junit测试延伸--方法的重复测试
在实际编码测试中,我们有的时候需要对一个方法进行多次测试,那么怎么办呢?这个问题和测试套件解决的方案一样,我们总不能不停的去右键run as,那怎么办呢?还好伟大的junit帮我们想到了. OK,现在 ...
- 【转】python模块分析之unittest测试(五)
[转]python模块分析之unittest测试(五) 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块分析之typing(三) p ...
- 【转】Python之日期与时间处理模块(date和datetime)
[转]Python之日期与时间处理模块(date和datetime) 本节内容 前言 相关术语的解释 时间的表现形式 time模块 datetime模块 时间格式码 总结 前言 在开发工作中,我们经常 ...
随机推荐
- JsonP的实现原理?
动态创建script标签,通过script标签中的src跨域属性,连接对方接口,并将回调函数通过接口传递给对方,对方服务器在准备好数据后再通过调用回调函数并以传递参数的方式将数据返回来.
- 在eclipse中安装groovy插件
在eclipse中安装groovy插件详细步骤: step 1:检查自己的eclipse版本:在help->About Eclipse中查看: step 2:进入 https://github. ...
- java基础知识—循环结构
1.while 循环 语法: while(循环操作){ 循环操作: } 特点:先判断,再执行:2. == : 用于数字比较 比较的是地址 equals: 用于字符串比较 比较的是字符 3.do-whi ...
- 机器学习笔记(三)Logistic回归模型
Logistic回归模型 1. 模型简介: 线性回归往往并不能很好地解决分类问题,所以我们引出Logistic回归算法,算法的输出值或者说预测值一直介于0和1,虽然算法的名字有“回归”二字,但实际上L ...
- winform devexpress 用法汇总
废话不多说先上图 1.封装分页控件 qrcodeOnPage1.SearchData(gridControl2, IDataPage, sWhere, "", "tb_o ...
- 剑指Offer 62. 二叉搜索树的第k个结点 (二叉搜索树)
题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. 例如, 5 / \ 3 7 / \ / \ 2 4 6 ...
- Vue开发爬坑记录
1.使用eslint代码检查时,常见的的错误: 1.1 Expected indentation of 0 spaces but found 1 前面的空格个数不对.应该不能有空格. 1.2 Stri ...
- 大数据 - hadoop - HDFS+Zookeeper实现高可用
高可用(Hign Availability,HA) 一.概念 作用:用于解决负载均衡和故障转移(Failover)问题. 问题描述:一个NameNode挂掉,如何启动另一个NameNode.怎样让两个 ...
- 安装activeMQ(window,linux系统)
今天学习了activeMQ服务器,把它说成成服务器是我的理解,,呵呵,首先,说一下它的安装, 官网:http://activemq.apache.org/overview.html window下的安 ...
- 神州数码标准访问控制列表配置(ACL)
实验要求:熟练掌握标准访问控制列表配置方法 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface s0/1 进入端口 ip ad ...