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')
 

结果:

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七月是你的谎言..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值