在MATLAB中介绍矢量化 - 任何好的教程?

Gac*_*cek 13 matlab loops vectorization

我正在寻找关于MATLAB中矢量化(循环)的任何好教程.

我有非常简单的算法,但它使用两个for循环.我知道向它进行矢量化应该很简单,我想学习如何做而不是要求你提供解决方案.

但是为了让你知道我有什么问题,所以你可以建议最好的教程,展示如何解决类似的问题,这是我的问题的大纲:

B = zeros(size(A));    % //A is a given matrix.
for i=1:size(A,1)
   for j=1:size(A,2)
      H = ... %// take some surrounding elements of the element at position (i,j) (i.e. using mask 3x3 elements)
      B(i,j) = computeSth(H); %// compute something on selected elements and place it in B
   end
end
Run Code Online (Sandbox Code Playgroud)

所以,我不是要求解决方案.我要求一个很好的教程,在MATLAB中矢量化循环的例子.我想学习如何做,并自己做.

gno*_*ice 8

以下是我经常链接到的几个MathWorks教程作为主题的参考:

这是Loren的博客文章之一,它针对特定的示例问题进行了很好的代码矢量化演练:

您作为样本提供的特定类型的问题(涉及处理给定矩阵的子矩阵)可以以不同的方式进行矢量化,具体取决于您正在执行的操作类型.您可以使用CONV2FILTER2代替嵌套for循环.图像处理工具箱中还有许多函数可以处理矩阵的邻域和块处理,例如NLFILTERBLOCKPROC.这些函数的文档应该可以帮助您弄清楚如何将它们用作向量化代码的方法.

  • 我强烈反对使用blockproc,如果你可以避免它 - 它非常慢(同样,它经历了从2009a到2009b的不兼容的变化).如果你有足够的RAM,最好运行`im2col`并一次性应用该功能. (3认同)