本文列举出几种Python中常见的计算点积的方式,并统计随着向量维度的增大,各种方法的计算效率上的差异。运行环境:
- CPU:Intel® Core™ i7-5930K @ 3.50GHz
- Python: 2.7.6
代码:
from itertools import izip, starmap, imapimport operatorimport numpy as npimport timer = range(10000)# method 1np.dot(r,r)# method 2sum(starmap(operator.mul, izip(r,r)))# method 3out = 0for k in range(len(r)):out += r[k] * r[k]# method 4sum(map(operator.mul,r,r))# method 5sum(imap(operator.mul,r,r))# method 6sum(i*j for i, j in zip(r, r))统计在不同向量维度:
10, 100, 1000, 2000, 3000, 4000, 5000, 8000, 10000各运行三次:
101. 0.000285 0.000188 0.0003092. 0.000117 6.3e-05 9.4e-053. 9.9e-05 6.1e-05 9.2e-054. 8.6e-05 4.4e-05 7.6e-055. 5.7e-05 4e-05 6.99999999999e-056. 9.3e-05 6e-05 8.29999999999e-051001. 0.000513 0.00052 0.0005042. 0.000169 0.000162 0.0001673. 0.000451 0.000311 0.0002884. 0.000137 0.000144 0.0001535. 0.000131 0.000138 0.0001416. 0.000224 0.000271 0.00021610001. 0.001683 0.001687 0.0016792. 0.000664 0.00065 0.0006613. 0.002238 0.002301 0.0025824. 0.000821 0.00089 0.000885. 0.000707 0.000928 0.0008226. 0.001958 0.001948 0.0019320001. 0.003138 0.00306 0.0031582. 0.001197 0.001089 0.0010753. 0.005211 0.004113 0.0043994. 0.001891 0.001826 0.0019535. 0.001415 0.001456 0.001736. 0.003595 0.003884 0.00428530001. 0.004468 0.004292 0.0045072. 0.001842 0.001727 0.0016373. 0.007802 0.007341 0.0068584. 0.002548 0.002274 0.00225. 0.002374 0.002348 0.0023356. 0.005697 0.005613 0.00566940001. 0.005946 0.005987 0.0059542. 0.002251 0.002102 0.0021893. 0.009069 0.010478 0.0092264. 0.003149 0.003699 0.0033635. 0.003032 0.003536 0.0031426. 0.012805 0.012598 0.01231650001. 0.007411 0.00731 0.0072342. 0.002744 0.002508 0.0025763. 0.012194 0.01231 0.0092164. 0.003953 0.003815 0.0039365. 0.00354 0.002698 0.0029486. 0.013849 0.012262 0.01512280001. 0.010604 0.011742 0.0116042. 0.004712 0.004703 0.0050373. 0.020271 0.014874 0.0204364. 0.007199 0.006417 0.0071935. 0.006887 0.006889 0.0068926. 0.021665 0.021659 0.021992100001. 0.01461 0.013028 0.0143072. 0.005814 0.005789 0.0058753. 0.023581 0.025064 0.0251164. 0.008041 0.008833 0.0088685. 0.007898 0.008619 0.0089256. 0.025248 0.02643 0.026212 取运行时间的均值,绘制成曲线图,可以看出,几种方法里,第2种方法的复杂度最小,随着向量维度的增加,时间消耗增加比较缓慢,而其他方法则相对较大。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/136771.htm