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

虽然用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))

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()

Wall time: 15.1 s

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

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

1 %%time
2 for p in range(50000):
3     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 方法

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

Wall time: 23.3 s

1 %%time
2 a = np.arange(100000)
3 for p in range(50000000):
4     range(len(a))

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]

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

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

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

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

Wall time: 1min 1s

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

转载于:https://www.cnblogs.com/cenariusxz/p/8860508.html

python 一些方法的时间测试相关推荐

  1. mac 打开html c python,在Mac系统使用Visual Studio Code运行Python的方法

    在Mac系统使用Visual Studio Code运行Python的方法 发布时间:2020-08-10 10:29:31 来源:亿速云 阅读:105 作者:小新 在Mac系统使用Visual St ...

  2. vscode python 远程调试_vscode 远程调试python的方法

    vscode 远程调试python的方法 发布时间:2019-10-14 15:32 来源:互联网 当前栏目:web技术类 本文介绍了vscode 远程调试python的方法,分享给大家,具有如下: ...

  3. mac怎么更新python_mac上更新python的方法

    mac上更新python的方法 发布时间:2020-09-03 10:56:43 来源:亿速云 阅读:88 作者:小新 小编给大家分享一下mac上更新python的方法,相信大部分人都还不怎么了解,因 ...

  4. 怎么看电脑安装python_查看电脑有没有安装Python的方法

    查看电脑有没有安装Python的方法 发布时间:2020-07-08 16:33:27 来源:亿速云 阅读:78 作者:清晨 这篇文章主要介绍查看电脑有没有安装Python的方法,文中介绍的非常详细, ...

  5. python给函数设置超时时间_在 Linux/Mac 下为Python函数添加超时时间的方法

    我们在使用 requests 这类网络请求第三方库时,可以看到它有一个参数叫做 timeout ,就是指在网络请求发出开始计算,如果超过 timeout 还没有收到返回,就抛出超时异常.(当然存在特殊 ...

  6. python 实现打电话_python 实现手机自动拨打电话的方法(通话压力测试)

    现在能用自动化实现的,尽量使用自动化程序去操作,代替人工去操作,更有效率. 今天说下用python结合adb命令去实现安卓手机端的通话压力测试. #操作前先在设置里打开power键可以结束通话按钮,否 ...

  7. Python:python语言中与时间有关的库函数简介、安装、使用方法之详细攻略

    Python:python语言中与时间有关的库函数简介.安装.使用方法之详细攻略 目录 与时间有关的库函数 案例应用 1.打印程序块前后运行时间 #T1.采用time库

  8. Python语言学习之时间那些事:python和时间的使用方法之详细攻略

    Python语言学习之时间那些事:python和时间的使用方法之详细攻略 目录 python和时间那些事 1.获取当前时间的几种方法 2.计算代码前后运行时间 python和时间那些事 1.获取当前时 ...

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

    2019独角兽企业重金招聘Python工程师标准>>> 经常获得了一个用户提交的当前日期,我们需要以这个日期为依据返回它的前一天.后一天的日期或者转换操作等.用Python可以非常简 ...

最新文章

  1. 进程间通信(三)—信号量
  2. 华为鲲鹏高校行长沙启航,助力基础研究成果转化
  3. Visual Studio Debug和Release的区别及obj的作用
  4. python pkl是什么类型的文件?怎么来打开它?(使用numpy和pickle都能打开)
  5. 基于 MySQL Binlog 的 Elasticsearch 数据同步实践
  6. mysql 原生 添加数据_手撸Mysql原生语句--增删改查
  7. CNN的几种经典模型
  8. Linux XZ压缩格式学习
  9. html5选择时间,科技常识:HTML5新控件之日期和时间选择输入的实现代码
  10. node的学习过程(菜鸟)
  11. Steam游戏上线初期的总结与思考
  12. linux以及网络协议
  13. php mocking,测试模拟器 Mocking
  14. flutter网络请求基础知识铺垫、及实战举例
  15. 雷顿学院大数据(一期课程)
  16. ESXi 7.0主机 查看硬盘SMART健康信息
  17. 设置InternetConnect的httpRequest连接数
  18. Qt Clion使用飞扬青云的自定义控件
  19. 哈工大2021 形式语言与自动机期末
  20. [vue 进阶] 关于dicts字典的用法

热门文章

  1. 拜读了《婆媳关系好坏取决于老公》一文,看似有道理,细读感觉其实应该不是那么回事...
  2. 【转】每天一个linux命令(50):crontab命令
  3. 触摸事件练习 -- 手势解锁
  4. 客户网页WIZnet无线解决方案 之 太阳能逆变器
  5. 两台Oracle服务器,使用udl测试连接
  6. 算法分析之-渐进记号
  7. P1083 [NOIP 2012]借教室
  8. windows 系统监视器 以及建议阀值
  9. 使用BIOS以及直接写显存绘制图形
  10. Struts2 Result详解