本系列文章由 @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. DB2:在缓冲池 "1" 中当前没有任何页面可用。. SQLCODE=-1218, SQLSTATE=57011, DRIVER=3.61.75

    服务器端DB2数据库最近频繁报错: 在缓冲池 , SQLSTATE=, DRIVER= 试验发现简单的查询SQL执行没有问题,复杂的SQL就会报上述错误. 百度发现是因为数据库bufferpool太小 ...

  2. 435 Non-overlapping Intervals 无重叠区间

    给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠.注意:    可以认为区间的终点总是大于它的起点.    区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠.示例 ...

  3. Hadoop集群搭建及MapReduce应用

    一.Hadoop集群的搭建与配置 1.节点准备 集群规划: 主机名 IP 安装的软件 运行的进程 weekend 01 192.168.1.60 jdk.hadoop NameNode.DFSZKFa ...

  4. Uediter的引用和取值

    页面应用Uediter控件,代码如下: <tr> <td align="center" class="xwnr_j"> <asp: ...

  5. AJPFX总结FileWriter类的write方法

    FileWriter从类OutputStreamWriter继承的 1.public void write(int c)          throws IOException写入单个字符.     ...

  6. JAVA300集笔记

    章节2 java入门阶段 2.1注释 单行注释 //  多行注释 /* 内容*/ 文本注释/**内容*/ 注释是为了方便阅读代码,在编译时注释会被删除. 2.2 标识符 标识符作用: 标识符用来给变量 ...

  7. 虚拟机下安装 CentOS 7 的几个小问题

    ※ 网络问题(Destination Host Unreachable) 安装时网络选择的"桥接"模式, 安装完毕,并配置IP地址后,发现只能ping通自己,局域网内的其他IP无法 ...

  8. 实现通知栏Notification

    课程Demo public class MainActivity extends Activity implements OnClickListener{ NotificationManager ma ...

  9. Redis缓存Object,List对象

    一.到目前为止(jedis-2.2.0.jar),在Jedis中其实并没有提供这样的API对对象,或者是List对象的直接缓存,即并没有如下类似的API jedis.set(String key, O ...

  10. Python list列表的常用操作方法

    本文主要介绍了Python中列表(List)的详解操作方法,包含创建.访问.删除.排序.切片,乘等操作方法 1.创建列表:把逗号分隔的不同的数据项使用方括号括起来 list = [1,2,3,'Jam ...