上一次,推导了计算导数,及应用梯度下降在逻辑回归的一个训练样本上。现在一个训练样本过程应用在m个训练样本上。
# coding=utf-8
import time # 导入时间库
import numpy as np # 导入numpy库
a = np.array([1, 2, 3, 4]) # 创建一个数据a
print(a)
# [1 2 3 4]
a = np.random.rand(1000000)
# 通过round随机得到两个一百万维度的数组
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)
# 打印for循环的版本的时间
print("For loop:" + str(1000 * (toc - tic)) + "ms")
代码中向量化转换的逻辑:z=np.dot(w,x)+b。其运行结果如下:相对于for循环,向量化版本的耗时非常低