Python中的向量化编程

在Andrew Ng的<< Machine Learning >>课程中,多次强调了使用向量化的形式进行编码,在深度学习课程中,甚至给出了编程原则:尽可能避免使用for循环而采用向量化形式。该课程采用的是matlab/octave语言,所擅长的方向正是数值计算,语言本身内置了对矩阵/向量的支持,比如:

a = log(x)

如果变量x是一个数值,那么a也会得到一个数值结果,如果x是一个矩阵,那么结果a也是一个矩阵。

但是对于机器学习领域广为使用的python语言而言,并没有内置这样的功能,毕竟python是一门通用语言。好消息是,借助一些第三方库,我们也可以很容易的处理向量数值运算。

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

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

下面就用一些简单的示例进行说明:

import numpy as np
import timea = np.random.rand(1000000)
b = np.random.rand(1000000)tic = time.time()
c = np.dot(a, b)
toc = time.time()
print("c: %f" % c)
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: %f" % c)
print("for loop:" + str(1000*(toc-tic)) + "ms")

在我的电脑上运行结果如下:

c: 249981.256724
vectorized version:0.998973846436ms
c: 249981.256724
for loop:276.798963547ms

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

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

更多关于numpy向量化编程的指导,可以参考这本开源的在线书籍:From Python to Numpy

)

本文分享自微信公众号 - 云水木石(ourpoeticlife),作者:云水木石

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 曾经有你,未来有我

    父亲为我买橘子的小片段,一件寻常小事,而如今“我”却从细节、神态、动作看待,更像是一个成年人试着去解释“爱”的真谛。他的背影就像是一个把钥匙,打开你我世界连结的...

    云水木石
  • 一步步提高手写数字的识别率(3)

    在前面的两篇文章《一步步提高手写数字的识别率(1)》和《一步步提高手写数字的识别率(2)》中,我们分别介绍了使用Softmax回归和神经网络来实现手写数字识别,...

    云水木石
  • [卷积神经网络]课程:Deep convolutional models习题解析

    同样,经典的卷积神经网络通常是几个卷积层后面带一个池化层,接近输出的地方再加上全连接层,所以选择选项1和3

    云水木石
  • 工具 | 学习总结:当我学完Python我学了些什么

    本文是本人学完Python后的一遍回顾,加深理解顺便留作手册以备查阅。 学习Python的这几天来,觉得Python还是比较简单,容易上手的,就基本语法而言,...

    CDA数据分析师
  • U-Net: Convolutional Networks for Biomedical Image Segmentation

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    于小勇
  • Pandas 透视表(pivot_table)

    英文出处:http://pbpython.com/pandas-pivot-table-explained.html 中文翻译: http://python...

    听城
  • Github被微软收购,这里整理了16个替代品

    微软斥资75亿美元收购以后,鉴于微软和开源竞争的历史,很多开发者都感到惊恐。毕竟,互联网上最大的一块可以自由的净土被微软染指,宝宝不开森。如果你真的担心微软会对...

    Fundebug
  • vue--vue-resource实现 get, post, jsonp请求

    除了 vue-resource 之外,还可以使用 axios 的第三方包实现实现数据的请求

    eadela
  • VGG 论文研读

    摘要 研究主要贡献是通过非常小的3x3卷积核的神经网络架构全面评估了增加深度对网络的影响,结果表明16-19层的网络可以使现有设置的网络性能得到显著提高

    范中豪
  • Python数据分析相关资料整理(博客&视频链接)

    关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 我们会再接再厉 成为全网优质的技术类...

    昱良

扫码关注云+社区

领取腾讯云代金券