2017-02-23 2 views
0

Ich habe zwei Vektoren (A und B) mit der Länge N. Dann muss ich beide multiplizieren, aber als "Integrationsprozess". Was bedeutet, dass ich zuerst A(1)*B(1), dann A(1:2)*B(1:2), bis A(1:N)*B(1:N) multiplizieren muss. Das Ergebnis des multiplizierenden Kabinenvektors ist eine Zahl, da B ein Spaltenvektor ist. Ich habe es mit einer for Schleife getan:Multiplizieren Sie zwei Vektoren mit entlang der Zeit zunehmenden Dimensionen

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

Aber ich wollte Dich fragen, ob dies die beste Lösung ist, oder es gibt eine andere Option mehr zeiteffizient, da N sehr groß (etwa 110,000)

+5

Es sieht aus wie C = Cumsum (A. * B). Ist das richtig? – Navan

+0

ja, irgendwie. Aber was ich brauche ist, dass, wenn zum Beispiel A = [1 2 3] und B = [1 1 1], das Ergebnis von C C = [1 * 1 1 * 1 + 1 * 2 1 * 1 + 1 sein sollte * 2 + 1 * 3] = [1 3 6]. Wenn Sie das tun, was Sie gesagt haben, bekomme ich eine Matrix N * N, wobei jede Spalte das erwartete Ergebnis ist. Aber wenn ich das tue, werde ich eine riesige Matrix bekommen, da mein N sehr groß ist. – Pep

+1

@ Navan Vorschlag produziert keine NxN-Matrix, es gibt einen Vektor zurück? 'A = [1 2 3]; B = [1 1 1]; C = Cumsum (A. * B) '' zurück 'C = [1 3 6]' wie gewünscht ... Gute Antwort Navan – Wolfie

Antwort

2
C = cumsum(A.*B) 

macht das gleiche ohne for-Schleife. Wie EBH in den Kommentaren vorgeschlagen hat, wenn Sie nicht sicher sind, ob A und B die gleiche Ausrichtung haben, verwenden Sie

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