机器学习014_Python中的向量化编程

1、矢量化/向量化

我们推荐使用向量化的形式进行编码,尽可能避免使用for循环而采用向量化形式。
对于机器学习领域广为使用的python语言而言,没有内置对于矩阵、向量的支持,毕竟python是一门通用语言。但是,借助一些第三方库(数值线性代数库)如下面的Numpy,我们也可以很容易的处理向量数值运算。

2、Numpy

Numpy是Numerical Python的缩写,是Python生态系统中高性能科学计算和数据分析所需的基础软件包。 它是几乎所有高级工具(如Pandas和scikit-learn)的基础。TensorFlow使用NumPy数组作为基础构建模块,在这些模块的基础上,他们为深度学习任务(大量进行长列表/向量/数值矩阵的线性代数运算)构建了张量对象和图形流。

许多Numpy运算都是用C实现的,相比Python中的循环,速度上有明显优势。所以采用向量化编程,而不是普通的Python循环,最大的优点是提升性能。另外相比Python循环嵌套,采用向量化的代码显得更加简洁。

3、numpy线性代数库的向量化计算的应用举例

1)例1:进行一个两个一位数组的点积计算:

# -*- coding: utf-8 -*
import time
import numpy as np

a = np.random.rand(100000)   # rand(x): 生成一个1行100000列的矩阵
b = np.random.rand(100000)
tima = time.time()
c = np.dot(a, b)   # dot:如果是一维矩阵/一位数组,那么就是点积,如果是多维,就是矩阵相乘
timb = time.time()
print("c : %f" % c)
print("vectorized version : " + str(1000*(timb-tima)))   # 使用numpy内置的线性代数函数来进行向量化计算

c = 0.0
tima = time.time()
for i in range(100000):
    c += a[i]*b[i]
timb = time.time()
print("c : %f" % c)
print("for loop : " + str(1000*(timb-tima)))   # 使用for循环进行数值计算

运行结果:

c : 25016.909886
vectorized version : 1.0001659393310547
c : 25016.909886
for loop : 133.00776481628418

可见,向量化的实现代码速度上有飞速提升,而且代码也看起来更简洁。

总之,无论你有多长的数据列表并需要对它们进行数学转换,都强烈考虑将这些Python数据结构(列表或元组或字典)转换为numpy.ndarray对象并使用固有的矢量化功能。

2)例2:梯度下降的同步更新规则在这里插入图片描述
假设n=2,那么梯度下降的同步更新规则就要求三个参数进行同步的计算,即中间的时间间隔极短,那么可以使用向量化的计算来使得时间消耗高度减短。
将三个参数看成一个向量,将阿尔法后面的部分看成一个向量delta。就可以将这三个式子简化成一行的向量(不同维度)上的运算,即:
在这里插入图片描述
相应的python的实现:待完成…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值