尝试一些方法的不同实现,比较一下时间,电脑比较渣,不过只是做个比较

虽然用python主要是方便,肯定是不快的,不过能快一点还是快一点好

numpy中大量使用同样 shape 的全 0 array,可以使用 np.zero() 方法或者是先开一个之后 copy:

  1. %%time
  2. for i in range(5000000):
  3. a = np.zeros((100,10))
  4. a = np.zeros((100,10))
  5. a = np.zeros((100,10))
  1. Wall time: 17.1 s
  1. %%time
  2. b = np.zeros((100,10))
  3. for i in range(5000000):
  4. a = b.copy()
  5. a = b.copy()
  6. a = b.copy()
  1. Wall time: 15.1 s

貌似先开一个,之后copy比较快,不过差异不明显

range() 还是 np.arrange(),最近用 array 有点多,经常啥都开 array

  1. %%time
  2. for p in range(50000):
  3. a = np.arange(100000)
  1. Wall time: 3.72 s
  1. %%time
  2. for p in range(50000):
  3. a = range(100000)
  1. Wall time: 31 ms

差距还是非常明显(不用想都知道2333),如果不需要用 array 方法的时候,还是 list 好了

访问 list 等下标,用 range(长度),不过先保存长度成常量还是多次用 len 方法

  1. %%time
  2. a = np.arange(100000)
  3. l = len(a)
  4. for p in range(50000000):
  5. range(l)
  1. Wall time: 23.3 s
  1. %%time
  2. a = np.arange(100000)
  3. for p in range(50000000):
  4. range(len(a))
  1. Wall time: 27.9 s

就这样看,应该调用 len 方法还是有点慢的,虽然差异也不是非常大,len 应该不是 O(n) 实现,可能是对象直接保存的一个属性,不过访问起来还是先存下来更快点

遍历一个 array ,同时使用标号

我会遍历下标长度的一个 list 来遍历它,用 zip 把标号和 array 合并,或者 emunerate ,或者干脆维护一个 id,循环中累加

  1. %%time
  2. for i in range(5000000):
  3. a = np.arange(10,30)
  4. l = len(a)
  5. for id in range(l):
  6. x = id+a[id]
  1. Wall time: 50 s
  1. %%time
  2. for i in range(5000000):
  3. a = np.arange(10,30)
  4. b = zip(range(len(a)),a)
  5. for item1,item2 in b:
  6. x = item1+item2
  1. Wall time: 51.2 s
  1. %%time
  2. for i in range(5000000):
  3. a = np.arange(10,30)
  4. c = enumerate(a)
  5. for item1,item2 in c:
  6. x = item1+item2
  1. Wall time: 52.3 s
  1. %%time
  2. for i in range(5000000):
  3. a = np.arange(10,30)
  4. d = zip(np.arange(len(a)),a)
  5. for item1,item2 in d:
  6. x = item1+item2
  1. Wall time: 52.9 s
  1. %%time
  2. for i in range(5000000):
  3. a = np.arange(10,30)
  4. id = 0
  5. for item in a:
  6. x = id+item
  7. id += 1
  1. Wall time: 1min 1s

看上去只有维护 id 累加最慢,其他都差别不太大,那只要条件允许大概还是按 C 的习惯开一个下标的 list 来遍历下标好了

python 一些方法的时间测试的更多相关文章

  1. python操作日期和时间的方法

    不管何时何地,只要我们编程时遇到了跟时间有关的问题,都要想到 datetime 和 time 标准库模块,今天我们就用它内部的方法,详解python操作日期和时间的方法.1.将字符串的时间转换为时间戳 ...

  2. Python中日期和时间格式化输出的方法

    本文转自:https://www.jb51.net/article/62518.htm 本文实例总结了python中日期和时间格式化输出的方法.分享给大家供大家参考.具体分析如下: python格式化 ...

  3. Python 魔术方法指南

    入门 构造和初始化 构造定制类 用于比较的魔术方法 用于数值处理的魔术方法 表现你的类 控制属性访问 创建定制序列 反射 可以调用的对象 会话管理器 创建描述器对象 持久化对象 总结 附录 介绍 此教 ...

  4. Python Web 性能和压力测试 multi-mechanize

    http://www.aikaiyuan.com/5318.html 对Web服务做Performance & Load测试,最常见的工具有Apache Benchmark俗称ab和商用工具L ...

  5. python基础教程总结14——测试

    1. 先测试,后编码 对程序的各个部分建立测试也是非常重要的(这也称为单元测试).测试驱动编程:Test-driven programming 1)精确的需求说明: 程序设计的理念是以编写测试程序开始 ...

  6. Python标准库02 时间与日期 (time, datetime包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python具有良好的时间和日期管理功能.实际上,计算机只会维护一个挂钟时间(wa ...

  7. junit测试延伸--方法的重复测试

    在实际编码测试中,我们有的时候需要对一个方法进行多次测试,那么怎么办呢?这个问题和测试套件解决的方案一样,我们总不能不停的去右键run as,那怎么办呢?还好伟大的junit帮我们想到了. OK,现在 ...

  8. 【转】python模块分析之unittest测试(五)

    [转]python模块分析之unittest测试(五) 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块分析之typing(三) p ...

  9. 【转】Python之日期与时间处理模块(date和datetime)

    [转]Python之日期与时间处理模块(date和datetime) 本节内容 前言 相关术语的解释 时间的表现形式 time模块 datetime模块 时间格式码 总结 前言 在开发工作中,我们经常 ...

随机推荐

  1. Android串口屏(电阻,电容触摸),带AV输入,7寸LCD1(800*48...

    基本参数:CPU:MT6572 双核1GHzRAM:512MB存储:4GB网络:GSM,WCDMA(BAND1)WIFI:2.4G 802.11bgn蓝牙:2.0支持GPS定位 扩展参数:1.电源输入 ...

  2. python入门之小栗子

    1 点球小游戏: from random import choice score=[0,0]direction=['left','center','right'] def kick(): print ...

  3. Python函数的一点用法

    #python的基本语法网上已经有很多详细的解释了,写在这里方便自己记忆一些 BIF是python内置的函数,任何一门语言都能用来创造函数,python也不例外 1.创建一个函数 def func() ...

  4. Python基础(条件判断,循环,占位符等)

    Python 自动化 系统开发用的语言和自动化脚本可以不同 学习peython可用于: 网路爬虫,数据分,web开发,人工智能,自动化运维,自动化测试,嵌入式,黑客 第三方库比较全 脚本语言:功能单一 ...

  5. shell脚本学习总结(不断更新中)

    前言:自从大学毕业参加工作以来,接触的开发工作都是在服务端完成,于是接触了比较多的Linux当做开发机使用,或多或少有一些重复性的工作,于是开始琢磨学习一些shell脚本的知识,以便处理这些繁琐的事情 ...

  6. hadoop.docker.up.problems: Too many levels of symbolic links

    #root@c7hp:~ excp c78 "zkServer.sh start"[1] 11:49:44 [FAILURE] c78 Exited with error code ...

  7. 【转】Android-Input 键盘设备

    https://source.android.com/devices/input/keyboard-devices 键盘设备 Android 支持各种键盘设备,包括特殊功能小键盘(音量和电源控制),紧 ...

  8. Mysql基础教程-Mysql的字符集查看与修改

    Show variables like “%char%”修改mysql的字符集----数据库级1)临时的修改Set global character-set_server=utf82)永久修改Alte ...

  9. 在eclipse上集成安装阿里巴巴代码规约P3C插件

    在eclipse上集成安装阿里巴巴代码规约P3C插件 参照网址: https://jingyan.baidu.com/article/2d5afd6923e78b85a3e28e5e.html 首先进 ...

  10. keil折叠代码

    在代码页面右键 Outlining->Start All Outlining