python向量化与循环计算内积外积速度对比

Posted 七月是你的谎言..

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python向量化与循环计算内积外积速度对比相关的知识,希望对你有一定的参考价值。

上吴恩达老师的课,介绍了python中向量化操作的速度和for循环的速度不是一个量级,故通过实验进行直观体会:

实验环境:windows10  python 3.7  jupyter

import numpy as np
import time
 
# 设置随机种子,保证每次生成的随机数不同
rd = np.random.RandomState(round(time.time()))  
 
#随机浮点数
a = rd.random(1000000)
b = rd.random(1000000)
 
 
# 随机整数矩阵
A = rd.randint(-2, 3, (10000, 100)) # 随机生成[-2,3)的整数,1000x100的矩阵
B = rd.randint(-2, 3, (10000, 100))
V = rd.randint(-100,100, (100,30))
# A = np.array([[1,2],[3,4]])
# V = np.array([[1,1],[2,2]])
 
# a = np.array([[1,1,1],[1,1,1]])
# b = np.array([[2,2],[2,2],[2,2]])
 
 
#测试向量内积
tic = time.time()
#如果操作数是向量,则dot返回内积;如果是矩阵,则返回外积即矩阵乘法
c1 = np.dot(a,b)  #对于向量内积,还可以使用numpy.inner
toc = time.time()
print("向量化的一维向量内积运算时长:"+str((toc-tic)*1000)+" ms")
print("结果为:"+str(c1)+'\\n')

 
tic = time.time()
c2=0
for i in range(len(a)):
    c2 += a[i]*b[i]
toc = time.time()
print("循环的一维向量内积运算时长:"+str((toc-tic)*1000)+" ms")
print("结果为:"+str(c2)+'\\n')


#测试矩阵内积
tic = time.time()
C = np.vdot(A,B)
toc = time.time()
print("向量化的矩阵内积运算时长:"+str((toc-tic)*1000)+" ms")
print("结果为:"+str(C)+'\\n')
 

tic = time.time()
c2=0
size = A.shape
for i in range(size[0]):
    for j in range(size[1]):
            c2 += A[i,j] * B[i,j]
toc = time.time()
print("循环的矩阵内积运算时长:"+str((toc-tic)*1000)+" ms")
print("结果为:"+str(c2)+'\\n')


#测试矩阵外积
tic = time.time()
C1 = np.matmul(A,V)
toc = time.time()
print("向量化的矩阵外积运算时长:"+str((toc-tic)*1000)+" ms")
print("结果为:"+str(C1)+'\\n')
 

size1 =A.shape
size2 =V.shape
 
C2 = np.zeros((size1[0],size2[1]))  #需要矩阵形状
tic = time.time()
for i in range(size1[0]):
    for j in range(size2[1]):
        for k in range(size1[1]):
            C2[i,j] += A[i,k] * V[k,j]
toc = time.time()
 
 
print("循环的矩阵外积运算时长:"+str((toc-tic)*1000)+" ms")
print("结果为:"+str(C2)+'\\n')
 

结果:

 

以上是关于python向量化与循环计算内积外积速度对比的主要内容,如果未能解决你的问题,请参考以下文章

python np.dot外积有效,但内积返回nan,太奇怪了

向量的内积和外积

[Python系列-15]:人工智能 - 数学基础 -5- 向量内积(点乘)和外积(叉乘)概念及几何意义

向量点乘(内积),叉乘(外积)

解释numpy向量化函数应用VS python for循环的速度差异

向量内积&外积