我是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