matlab循环矢量化 嵌套,关于循环:MATLAB中的矢量化简介 – 任何好的教程?

我正在寻找关于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

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

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

代码矢量化指南

提高性能的技术:矢量化循环

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

加快MATLAB应用程序的速度

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

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

@Jonas:很高兴知道。 我实际上并没有经常使用BLOCKPROC来遇到这些问题。 我只是把它列为OP可能想要研究的众多选项中的一个。

我在一年前写了一篇小文章,解释了我每天花了3年时间编写Matlab代码后发现的一个技巧,经常花太多时间来渲染一切。

http://www.gyomalin.com/reasonable_vectorization.html

主要思想是,只需沿一个维度向量化代码,就可以获得很长的路要走。你们中的一些人可能已经发现了这个技巧,但我认为值得称之为Matlab设计模式。

好的,谢谢!

经验法则是你应该尽可能使用内置的matlab函数来代替循环操作数组。例如,在我看来,你所描述的问题可以表示为卷积,然后你可以使用matlab的conv2()或filter()函数来实现它而不需要循环。

另一个通用技巧是尝试用矩阵运算来表达你的问题。

您还应该更喜欢交易空间。假设你有一个n维向量v和一个m×n矩阵M,其中每一行也是一个n维向量。假设你想要v和M的每一行之间的欧几里德距离。在这种情况下,您应该使用repmat()创建一个包含m个v副本的矩阵,并使用没有循环的逐元素数组运算来计算距离。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值