2017-02-23 55 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(:))