本系列文章由 @yhl_leo 出品,转载请注明出处。

文章链接: http://blog.csdn.net/yhl_leo/article/details/51793984


本文列举出几种python中常见的计算点积的方式,并统计随着向量维度的增大,各种方法的计算效率上的差异。

运行环境:

  • CPU:Intel® Core™ i7-5930K @ 3.50GHz
  • Python: 2.7.6

代码:

from itertools import izip, starmap, imap
import operator
import numpy as np
import time r = range(10000) # method 1
np.dot(r,r) # method 2
sum(starmap(operator.mul, izip(r,r))) # method 3
out = 0
for k in range(len(r)):
out += r[k] * r[k] # method 4
sum(map(operator.mul,r,r)) # method 5
sum(imap(operator.mul,r,r)) # method 6
sum(i*j for i, j in zip(r, r))

统计在不同向量维度:

10, 100, 1000, 2000, 3000, 4000, 5000, 8000, 10000

各运行三次:

10
1. 0.000285 0.000188 0.000309
2. 0.000117 6.3e-05 9.4e-05
3. 9.9e-05 6.1e-05 9.2e-05
4. 8.6e-05 4.4e-05 7.6e-05
5. 5.7e-05 4e-05 6.99999999999e-05
6. 9.3e-05 6e-05 8.29999999999e-05
100
1. 0.000513 0.00052 0.000504
2. 0.000169 0.000162 0.000167
3. 0.000451 0.000311 0.000288
4. 0.000137 0.000144 0.000153
5. 0.000131 0.000138 0.000141
6. 0.000224 0.000271 0.000216
1000
1. 0.001683 0.001687 0.001679
2. 0.000664 0.00065 0.000661
3. 0.002238 0.002301 0.002582
4. 0.000821 0.00089 0.00088
5. 0.000707 0.000928 0.000822
6. 0.001958 0.001948 0.00193
2000
1. 0.003138 0.00306 0.003158
2. 0.001197 0.001089 0.001075
3. 0.005211 0.004113 0.004399
4. 0.001891 0.001826 0.001953
5. 0.001415 0.001456 0.00173
6. 0.003595 0.003884 0.004285
3000
1. 0.004468 0.004292 0.004507
2. 0.001842 0.001727 0.001637
3. 0.007802 0.007341 0.006858
4. 0.002548 0.002274 0.0022
5. 0.002374 0.002348 0.002335
6. 0.005697 0.005613 0.005669
4000
1. 0.005946 0.005987 0.005954
2. 0.002251 0.002102 0.002189
3. 0.009069 0.010478 0.009226
4. 0.003149 0.003699 0.003363
5. 0.003032 0.003536 0.003142
6. 0.012805 0.012598 0.012316
5000
1. 0.007411 0.00731 0.007234
2. 0.002744 0.002508 0.002576
3. 0.012194 0.01231 0.009216
4. 0.003953 0.003815 0.003936
5. 0.00354 0.002698 0.002948
6. 0.013849 0.012262 0.015122
8000
1. 0.010604 0.011742 0.011604
2. 0.004712 0.004703 0.005037
3. 0.020271 0.014874 0.020436
4. 0.007199 0.006417 0.007193
5. 0.006887 0.006889 0.006892
6. 0.021665 0.021659 0.021992
10000
1. 0.01461 0.013028 0.014307
2. 0.005814 0.005789 0.005875
3. 0.023581 0.025064 0.025116
4. 0.008041 0.008833 0.008868
5. 0.007898 0.008619 0.008925
6. 0.025248 0.02643 0.026212

取运行时间的均值,绘制成曲线图,可以看出,几种方法里,第2种方法的复杂度最小,随着向量维度的增加,时间消耗增加比较缓慢,而其他方法则相对较大。

python 几种点积运算方式效率分析的更多相关文章

  1. 09 Python两种创建类的方式

    第一种比较普遍的方式: class Work(): def __init__(self,name): self.name = name w = Work('well woker') 这样就简单创建了一 ...

  2. 几种常见SQL分页方式效率比较(转)

    http://www.cnblogs.com/iamowen/archive/2011/11/03/2235068.html 分页很重要,面试会遇到.不妨再回顾总结一下. 1.创建测试环境,(插入10 ...

  3. 几种常见SQL分页方式效率比较

    分页很重要,面试会遇到.不妨再回顾总结一下: 一:创建测试环境,(插入100万条数据大概耗时5分钟). create database DBTestuse DBTest 二:--创建测试表 creat ...

  4. C++中三种传递参数方法的效率分析

    众所周知,在C++中有三种参数传递的方式: 按值传递(pass by value) #include <iostream> using namespace std; void swap(i ...

  5. 一个在字符串中查找多个关键字的函数strstrs(三种不同算法实现及效率分析)

    平时项目中有时需要用到在字符串中搜索两个或更多的关键字的情景.例如:将字符串"ab|cd#ef|"按竖线或者井号做分隔 如果是大项目,一般会采用正则表达式做处理.但有时写个小程序, ...

  6. python列表和字符串的三种逆序遍历方式

    python列表和字符串的三种逆序遍历方式 列表的逆序遍历 a = [1,3,6,8,9] print("通过下标逆序遍历1:") for i in a[::-1]: print( ...

  7. python下几种打开文件的方式

    昨天看完了这本python进阶,感觉这本书对我启发很大,做了三张纸的笔记,方便我在遇到问题的时候翻阅,然后寻找可能的解决方案.作为一个使用Python一年的小白,虽然说不是小白,但是这一年来基本上是用 ...

  8. Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...

  9. Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

    Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...

随机推荐

  1. Increasing Sequence CodeForces - 11A

    Increasing Sequence CodeForces - 11A 很简单的贪心.由于不能减少元素,只能增加,过程只能是从左到右一个个看过去,看到一个小于等于左边的数的数就把它加到比左边大,并记 ...

  2. tabBar隐藏方式

    如果是从A push到B,并且把A的一个东西传到B,那么在push时就要隐藏tabBar,并且要在B ViewController设置一个接收A传到的属性. 这种方式一般用在表格点选,要把表格点选的内 ...

  3. 一个页面通过iframe,获取另一个页面的form

    document.getElementsByTagName("iframe")[0].contentWindow.document.forms[0].submit(); var z ...

  4. [转]Entity Framework and SQL Azure

    本文转自:https://msdn.microsoft.com/zh-cn/library/gg190738 Julie Lerman http://thedatafarm.com April 201 ...

  5. 置换测试: Mock, Stub 和其他

    简介 在理想情况下,你所做的所有测试都是能应对你实际代码的高级测试.例如,UI 测试将模拟实际的用户输入(Klaas 在他的文章中有讨论)等等.实但际上,这并非永远都是个好主意.为每个测试用例都访问一 ...

  6. Redis相关问题收集

    问题一.强制关闭Redis快照导致不能持久化 MISCONF Redis is configured to save RDB snapshots, but is currently not able ...

  7. 解决windows下rstudio安装playwith包报错问题

    一.playwith包简介 playwith包提供了一个GTK+图形用户界面(GUI),使得用户可以编辑R图形并与其交互.playwith()函数允许用户识别和标注点.查看一个观测所有的变量值.缩放和 ...

  8. iOS - 事件处理全过程(补充)

    事件处理的完整过程 1> 先将事件对象由上往下传递(由父控件传递给子控件),找到最合适的控件来处理这个事件. 2> 调用最合适控件的touches….方法 3> 如果调用了[supe ...

  9. 5-Java-C(调和级数)

    题目描述: 1/1 + 1/2 + 1/3 + 1/4 + ... 在数学上称为调和级数. 它是发散的,也就是说,只要加上足够多的项,就可以得到任意大的数字. 但是,它发散的很慢: 前1项和达到 1. ...

  10. dxf组码

    值 说明 -5 APP:永久反应器链 -4 APP:条件运算符(仅与 ssget 一起使用) -3 APP:扩展数据 (XDATA) 标记(固定) -2 APP:图元名参照(固定) -1 APP:图元 ...