zoukankan      html  css  js  c++  java
  • python 几种点积运算方式效率分析


    本系列文章由 @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种方法的复杂度最小,随着向量维度的增加,时间消耗增加比较缓慢,而其他方法则相对较大。

  • 相关阅读:
    ML、DL及RL介绍和区别
    ros工作空间中文件夹结构
    C算法,已知结构体成员地址,如何得出结构体的基地址?
    循*迹小车轨道识别算法
    树莓派ssh卡顿之双机互联解决
    楼宇对讲自动开门的设计与实现
    JavaJSONArray jsonArray = JSONArray.fromObject()使用
    Java虚拟机详解JVM常见问题总结
    git 修改commit信息 Dawa
    通过commit_id找回文件 Dawa
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6332120.html
Copyright © 2011-2022 走看看