从八度代码中删除循环

时间:2014-07-29 16:41:09

标签: matlab octave vectorization

我是Octave的新手,想要对这种计算进行矢量化......

A和B是具有相同行数的矩阵,比如m。否则它们具有任意列大小。

设大小(A,2)= k,大小(B,2)= l

我想要矢量化的循环。

 for t = 1:m
    ARP = ARP + A(t,:)' * B(t,:)
 end

这是矩阵大小(kX1)X(1Xl)= kXl的总和。

最后ARP = 1 / m * ARP

经过一番研究后,我写了这个解决方案'当矩阵变得很大时,它会膨胀到我的矩阵的大小,实际上会失败。

%Create copies of A stacked on top of each other to a depth of l
exA = repmat(A, l, 1);                     % (m * k)Xl

%Reshape it so that exA has each column of A cloned k times
exA = reshape(exA, m, k * l);              % mX(k * l)

%Create copies of B stacked next to each other to a width k
exB = repmat(B, 1, k);                     % mX(l * k)

%Both matrices are now m X k*l so we can element-wise multiply
%and take the mean of the rows.


ARP = mean(exA .* exB, 1);   % 1X(k * l)

ARP = reshape(ARP, l, k)'; 

我也知道可以在带有bsxfun的矢量化中替换repmat,尽管在这种情况下不清楚如何实现bsxfun。我感谢任何帮助我获得优化解决方案的帮助,并且还说明了我可以针对类似问题研究的矢量化技术。

先谢谢Mike

0 个答案:

没有答案