矢量化编程

当使用学习算法时,一段更快的代码通常意味着项目进展更快。例如,如果你的学习算法需要花费20分钟运行完成,这意味着你每个小时能“尝试”3个新主意。但是假如你的程序需要20个小时来运行,这意味着你一天只能“尝试”一个新主意,因为你需要花费这么长时间来等待程序的反馈。对于后者,假如你可以提升代码的效率让其只需要运行10个小时,那么你的效率差不多提升一倍。


矢量化编程是提高算法速度的一种有效方法。为了提升特定数值运算操作(如矩阵相乘、矩阵相加、矩阵-向量乘法等)的速度,数值计算和并行计算的研究人员已经努力了几十年。矢量化编程的思想就是尽量使用这些被高度优化的数值运算操作来实现我们的学习算法。


例如,假设x \in \Re^{n+1} 和\textstyle \theta \in \Re^{n+1} 为向量,需要计算\textstyle z = \theta^Tx ,那么可以按以下方式实现(使用Matlab):


z = 0;
for i=1:(n+1),z = z + theta(i) * x(i);
end;


或者可以更加简单的写为:


z = theta' * x;


第二段程序代码不仅简单,而且运行速度更快。


通常,一个编写Matlab/Octave程序的诀窍是:


代码中尽可能避免显式的for循环。


上面的第一段代码使用了一个显式的for循环。通过不使用for循环实现相同功能,可以显著提升运行速度。对Matlab/Octave代码进行矢量化的工作很大一部分集中在避免使用for循环上,因为这可以使得Matlab/Octave更多地利用代码中的并行性,同时其解释器的计算开销更小。


关于编写代码的策略,开始时你会觉得矢量化代码更难编写、阅读和调试,但你需要在编码和调试的便捷性与运行时间之间做个权衡。因此,刚开始编写程序的时候,你可能会选择不使用太多矢量化技巧来实现你的算法,并验证它是否正确(可能只在一个小问题上验证)。在确定它正确后,你可以每次只矢量化一小段代码,并在这段代码之后暂停,以验证矢量化后的代码计算结果和之前是否相同。最后,你会有望得到一份正确的、经过调试的、矢量化且有效率的代码。


一旦对矢量化常见的方法和技巧熟悉后,你将会发现对代码进行矢量化通常并不太费劲。矢量化可以使你的代码运行的更快,而且在某些情况下,还简化了你的代码。


中英文对照

矢量化 vectorization


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python数模笔记-NetworkX(1)图的操作

1、NetworkX 图论与网络工具包 NetworkX 是基于 Python 语言的图论与复杂网络工具包,用于创建、操作和研究复杂网络的结构、动力学和功能。 NetworkX 可以以标准和非标准的数据格式描述图与网络,生成图与网络,分析网络结构,构建…

逻辑回归的向量化实现样例

逻辑回归的向量化实现样例 我们想用批量梯度上升法对logistic回归分析模型进行训练,其模型如下: 让我们遵从公开课程视频与CS229教学讲义的符号规范,设 ,于是 ,, 为截距。假设我们有m个训练样本{(, ) ,...…

Python数模笔记-NetworkX(2)最短路径

1、最短路径问题的常用算法 最短路径问题是图论研究中的经典算法问题,用于计算图中一个顶点到另一个顶点的最短路径。 欢迎关注 Youcans 原创系列,每周更新数模笔记 Python数模笔记-PuLP库 Python数模笔记-StatsModels统计回归 Python数模笔记-Sklearn…

神经网络向量化

神经网络向量化 在本节,我们将引入神经网络的向量化版本。在前面关于神经网络介绍的章节中,我们已经给出了一个部分向量化的实现,它在一次输入一个训练样本时是非常有效率的。下边我们看看如何实现同时处理多个训练样本的算法。具体来讲&…

Python数模笔记-NetworkX(3)条件最短路径

1、带有条件约束的最短路径问题 最短路径问题是图论中求两个顶点之间的最短路径问题,通常是求最短加权路径。 条件最短路径,指带有约束条件、限制条件的最短路径。例如,顶点约束,包括必经点或禁止点的限制;边的约束&…

简单技能之程序调试入门

简单技能之程序调试入门 黑盒测试 等价类划分

Python数模笔记-NetworkX(4)最小生成树

1、生成树和最小生成树 1.1 生成树 连通的无圈图称为树,就是不包含循环的回路的连通图。 对于无向连通图,生成树(Spanning tree)是原图的极小连通子图,它包含原图中的所有 n 个顶点,并且有保持图连通的最…

Python数模笔记-NetworkX(5)关键路径法

关键路径法(Critical path method,CPM)是一种计划管理方法,通过分析项目过程中工序进度安排寻找关键路径,确定最短工期,广泛应用于系统分析和项目管理。 1、拓扑序列与关键路径 1.1 拓扑序列 一个大型工程…

Python小白的数学建模课-01.新手必读

Python 完全可以满足数学建模的需要。 Python 是数学建模的最佳选择之一,而且在其它工作中也无所不能。 『Python小白的数学建模课 Youcans』 带你从数模小白成为国赛达人。 欢迎关注『Python小白的数学建模课 Youcans』系列,每周持续更新 Python小白…

Python的数学建模课-02.数据导入

数据导入是所有数模编程的第一步,比你想象的更重要。 先要学会一种未必最佳,但是通用、安全、简单、好学的方法。 『Python小白的数学建模课 Youcans』 带你从数模小白成为国赛达人。 1. 数据导入是所有数模编程的第一步 编程求解一个数模问题&#…

UFIDL稀疏自编码代码实现及解释

UFIDL稀疏自编码代码实现及解释 1.今天我们来讲一下UFIDL的第一个练习。 1.我们来看看最难的一个.m文件 %% ---------- YOUR CODE HERE -------------------------------------- % Instructions: Compute the cost/optimization objective J_sparse(W,b) for the Sparse Aut…

Python小白的数学建模课-A2.2021年数维杯C题(运动会优化比赛模式探索)探讨

关注收藏,国赛再会。 运动会优化比赛模式问题,是公平分配问题。 『Python小白的数学建模课 Youcans』带你从数模小白成为国赛达人。 2021第六届数维杯大学生数学建模 赛题已于5月27日公布,C题是"运动会优化比赛模式探索"。本文对…

Python小白的数学建模课-03.线性规划

线性规划是很多数模培训讲的第一个算法,算法很简单,思想很深刻。 要通过线性规划问题,理解如何学习数学建模、如何选择编程算法。 『Python小白的数学建模课 Youcans』带你从数模小白成为国赛达人。 1. 求解方法、算法和编程方案 线性规…

Python小白的数学建模课-A1.国赛赛题类型分析

分析赛题类型,才能有的放矢。 评论区留下邮箱地址,送你国奖论文分析 『Python小白的数学建模课 Youcans』 带你从数模小白成为国赛达人。 1. 数模竞赛国赛 A题类型分析 年份题目要求方法2020A炉温曲线建立温度模型,计算炉温曲线&#xff…

白话(whitening)

白化 Contents [hide]1 介绍2 2D 的例子3 ZCA白化4 正则化5 中英文对照6 中文译者 介绍 我们已经了解了如何使用PCA降低数据维度。在一些算法中还需要一个与之相关的预处理步骤,这个预处理过程称为白化(一些文献中也叫sphering)。举例来说&…

Python小白的数学建模课-04.整数规划

整数规划与线性规划的差别只是变量的整数约束。 问题区别一点点,难度相差千万里。 选择简单通用的编程方案,让求解器去处理吧。 『Python小白的数学建模课 Youcans』带你从数模小白成为国赛达人。 1. 从线性规划到整数规划 1.1 为什么会有整数规划&…

实现主成分分析和白化

实现主成分分析和白化 在这一节里,我们将总结PCA, PCA白化和ZCA白化算法,并描述如何使用高效的线性代数库来实现它们。 首先,我们需要确保数据的均值(近似)为零。对于自然图像,我们通过减去每个图像块(patc…

Python小白的数学建模课-05.0-1规划

0-1 规划不仅是数模竞赛中的常见题型,也具有重要的现实意义。 双十一促销中网购平台要求二选一,就是互斥的决策问题,可以用 0-1规划建模。 小白学习 0-1 规划,首先要学会识别 0-1规划,学习将问题转化为数学模型。 『…

mac下一些终端命令的使用

mac基础终端命令入门作为一名编程人员,(叫程序猿显得屌丝,叫攻城狮感觉还达不到),我经常看到许多大神在终端里面进行一些神操作。鉴于此,我今天就百度了一下,别问我为什么不Google,穷…