前言
向量化就是要去除代码中for循环,这就需要用到矩阵,Python是可以直接进行矩阵计算的,C语言就不行,我以前在使用MATLAB时候就觉得MATLAB非常强大,就是因为其矩阵计算能力,而且MATLAB名字就叫矩阵实验室。但可惜MATLAB是收费软件,在接触到python以后发现,Python在实现方法上有很多与MATLAB相似的地方,比如在矩阵计算这方面,而且还是免费开源的。我觉得矩阵计算能力和开源是Python能被深度学习研究者逐渐到完全接受最根本的原因。
对比
for循环计算和矩阵计算有什么区别,一个是串行计算,一个是并行计算。CPU和GPU都有并行化的能力,如果用for循环,相当于放弃使用这种功能。而GPU和CPU并行化计算的能力不一样。GPU为什么强,我没有查阅资料,但是我的理解是GPU开始是做图形处理器的,需要做大量类似的运算。而CPU需要做各种复杂运算。而矩阵运算就是大量的的类似运算,这个应该就是GPU比CPU快的原因。
例子
import numpy as np
a = np.array([1,2,3,4])
print(a)
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("Vectorized version:" + str(1000*(toc-tic)) + "ms")
结果是
Vectorized version:6.000041961669922ms
For loop:386.0001564025879ms