2017-02-23 66 views
0

我有两个向量(称为AB),长度为N。然后,我需要将它们两者相乘,但作为一个“整合”过程。这意味着我必须首先乘以A(1)*B(1),然后A(1:2)*B(1:2),直到A(1:N)*B(1:N)。由于B是一个列向量,因此乘上展位向量的结果是一个数字。我已经与for循环中完成它:乘以尺寸随时间增加的两个向量

for k = 1:N 
    C(k) = A(1:k) * B(1:k).'; 
end 

但是,我想问问你,如果这是最好的解决办法或有任何其他选项更加节省时间,因为N是非常大(约110,000

+5

看起来像C = cumsum(A. * B)。它是否正确? – Navan

+0

是的,那种。但我需要的是,例如,如果A = [1 2 3]和B = [1 1 1],则C的结果应该是C = [1 * 1 1 * 1 + 1 * 2 1 * 1 + 1 * 2 + 1 * 3] = [1 3 6]。做你说的我得到一个矩阵N * N,其中每列是预期的结果。但如果我这样做,我会得到一个巨大的矩阵,因为我的N非常大。 – Pep

+1

@ Navan的建议不会产生一个NxN矩阵,它会返回一个向量? 'A = [1 2 3]; B = [1 1 1]; C = cumsum(A. * B)'返回'C = [1 3 6]'按要求...好回答Navan – Wolfie

回答

2
C = cumsum(A.*B) 

在没有循环的情况下做同样的事情。由于EBH在评论中建议如果您不确定A和B是否具有相同的方向,请使用

C = cumsum(A(:).*B(:))