2-4 向量化
向量化(Vectorization)
向量化是非常基础的去除代码中 for 循环的艺术 。
在逻辑回归中需要去计算$z = {w^T}x + b$,w,x都是列向量 ,如果维度为nx,那么采用非向量化的方式计算就需要采用下面的方法:
z=0
for i in range(n_x)
z+=w[i]*x[i]
z+=b
作为一个对比,向量化实现将会直接计算 {w^T}x:
z=np.dot(w,x)+b
向量化的实现版本:
import numpy as np
import time
a = np.random.rand(1000000)
b = np.random.rand(1000000)
tic = time.time()
c = np.dot(a,b)
toc = time.time()
print(“Vectorized version:” + str(1000*(toc-tic)) +”ms”)
非向量化的实现版本:
c = 0
tic = time.time()
for i in range(1000000):
c += a[i]*b[i]
toc = time.time()
print(c)
print(“For loop:” + str(1000*(toc-tic)) + “ms”)
向量化的更多例子( More Examples of Vectorization)
矩阵乘法:
u = np.dot(A,v)
对向量v的每个元素做指数操作:
u = np.exp(v)
计算对数函数:
u = np.log(v)
计算数据绝对值:
u = np.abs(v)
计算一组元素中的最大值:
u = np.maxinum(v)