本系列文章由 @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. Ubuntu Server 上安装pip后pip命令报错的解决办法

    Installation Do I need to install pip? pip is already installed if you are using Python 2 >=2.7.9 ...

  2. Android Dialogs(3)警示Dialog教程[创建,单选,复选,自定义]等等

    本节内容 1. Building an Alert Dialog 2. Adding buttons 3. Adding a list 4. Adding a persistent multiple- ...

  3. Android Dialogs(1)Dialog简介及Dialog分类

    Dialogs A dialog is a small window that prompts the user to make a decision or enter additional info ...

  4. Sqlite数据库中索引的使用、索引的优缺点[转]

    原文链接1   原文链接2 3. 索引的种类 1)聚集索引:表中行的物理顺序与键值的逻辑(索引)顺序相同.因为数据的物理顺序只能有一种,所以一张表只能有一个聚集索引.如果一张表没有聚集索引,那么这张表 ...

  5. 数据流和ByteArray

    问题:如何把一个long类型的数写进一个文件里 所以现在有DataInputStream和DataOutputStream 这两个是节点流 例子代码: import java.io.*; public ...

  6. rsync常见错误

    rsync使用时的常见问题: 错误1: rsync: read error: Connection reset by peer (104) rsync error: error in rsync pr ...

  7. ABP教程(一)- ABP介绍

    ABP是什么 ABP是”ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用 ...

  8. AJPFX:学习JAVA程序员两个必会的冒泡和选择排序

    * 数组排序(冒泡排序)* * 冒泡排序: 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处* * 选择排序 : 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现 ...

  9. 个人复习记录之-js

    1变量:内存中储存一个数据的储存空间. 使用:声明,赋值,取值.注 不能以数字开头,不能用保留字 *声明提前:在程序正式执行前,都会将所有var声明的变量提前到开始位置,集中创建***赋值留在原地** ...

  10. Spark学习之Spark调优与调试(7)

    Spark学习之Spark调优与调试(7) 1. 对Spark进行调优与调试通常需要修改Spark应用运行时配置的选项. 当创建一个SparkContext时就会创建一个SparkConf实例. 2. ...