矢量化编程
From Ufldl
Line 1: | Line 1: | ||
+ | |||
当使用学习算法时,一段更快的代码通常意味着项目进展更快。例如,如果你的学习算法需要花费20分钟运行完成,这意味着你每个小时能“尝试”3个新主意。但是假如你的程序需要20个小时来运行,这意味着你一天只能“尝试”一个新主意,因为你需要花费这么长时间来等待程序的反馈。对于后者,假如你可以提升代码的效率让其只需要运行10个小时,那么你的效率差不多提升一倍。 | 当使用学习算法时,一段更快的代码通常意味着项目进展更快。例如,如果你的学习算法需要花费20分钟运行完成,这意味着你每个小时能“尝试”3个新主意。但是假如你的程序需要20个小时来运行,这意味着你一天只能“尝试”一个新主意,因为你需要花费这么长时间来等待程序的反馈。对于后者,假如你可以提升代码的效率让其只需要运行10个小时,那么你的效率差不多提升一倍。 | ||
Line 4: | Line 5: | ||
例如,假设<math>x \in \Re^{n+1}</math> 和<math>\textstyle \theta \in \Re^{n+1}</math> 为向量,需要计算<math>\textstyle z = \theta^Tx</math> ,那么可以按以下方式实现(使用Matlab): | 例如,假设<math>x \in \Re^{n+1}</math> 和<math>\textstyle \theta \in \Re^{n+1}</math> 为向量,需要计算<math>\textstyle z = \theta^Tx</math> ,那么可以按以下方式实现(使用Matlab): | ||
+ | |||
<syntaxhighlight lang="matlab"> | <syntaxhighlight lang="matlab"> | ||
z = 0; | z = 0; | ||
Line 12: | Line 14: | ||
或者可以更加简单的写为: | 或者可以更加简单的写为: | ||
+ | |||
<syntaxhighlight lang="matlab"> | <syntaxhighlight lang="matlab"> | ||
z = theta' * x; | z = theta' * x; | ||
Line 19: | Line 22: | ||
通常,一个编写Matlab/Octave程序的诀窍是: | 通常,一个编写Matlab/Octave程序的诀窍是: | ||
+ | |||
::'''代码中尽可能避免显式的for循环。''' | ::'''代码中尽可能避免显式的for循环。''' | ||
Line 26: | Line 30: | ||
一旦对矢量化常见的方法和技巧熟悉后,你将会发现对代码进行矢量化通常并不太费劲。矢量化可以使你的代码运行的更快,而且在某些情况下,还简化了你的代码。 | 一旦对矢量化常见的方法和技巧熟悉后,你将会发现对代码进行矢量化通常并不太费劲。矢量化可以使你的代码运行的更快,而且在某些情况下,还简化了你的代码。 | ||
+ | |||
+ | |||
+ | {{Vectorized Implementation}} | ||
+ | |||
+ | |||
+ | ==中文译者== | ||
+ | |||
+ | @caleb07, @咖灰茶,@邓亚峰-人脸识别 |