【问题标题】:Can this for loop be vectorized for speed [duplicate]这个for循环可以矢量化以提高速度吗?
【发布时间】:2020-04-26 19:10:31
【问题描述】:

我需要找出H_A的每个元素与H_B中的每个元素的区别,这是我的方法

              H_A=reshape(H_A,1,[]);
              H_B=reshape(H_B,1,[]);
              for i=1:SIZE^2
              D(i,:)=((H_A(i)-H_B)).^2;
              end

可以将其矢量化以提高速度。

【问题讨论】:

  • 骗子是针对3D点的,这个问题是针对1D点的。但那里的答案实际上适用于任意数量的维度,包括 1。

标签: matlab vectorization


【解决方案1】:

试试 bsxfun。

H_A = reshape(H_A, [], 1);
H_B = reshape(H_B, 1, []);
D = bsxfun(@minus, H_A, H_B).^2;

【讨论】:

    【解决方案2】:

    你可以使用广播:

    H_A = reshape(H_A, [], 1);
    H_B = reshape(H_B, 1, []);
    (H_A-H_B).^2;
    

    可能是最快的选择。还有pdist2可以让你计算不同的距离指标:

    H_A = reshape(H_A, [], 1);
    H_B = reshape(H_B, [],1);
    pdist2(H_A,H_B,'squaredeuclidean')
    

    【讨论】:

      猜你喜欢
      • 2017-11-19
      • 2013-12-12
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      相关资源
      最近更新 更多