Replacing a for loop with matrix multiplication
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Jessica Nadalin
am 1 Feb. 2021
Kommentiert: Bruno Luong
am 1 Feb. 2021
In the problem I have here, x is a 2x300 matrix and SIG is a 2x2 matrix.
What I'm looking for is a 1x300 vector, where the ith entry corresponds to x(:,i)'*inv(SIG)*x(:,i). I've written this out in a for loop below:
ans = zeros(1,size(x,2));
for i = 1:size(x,2)
ans(i) = x(:,i)'*inv(SIG)*x(:,i);
end
but I think there must be a way to make this more efficient with some sort of matrix multiplication--I just can't figure it out.
Any help appreciated!
1 Kommentar
Akzeptierte Antwort
James Tursa
am 1 Feb. 2021
Bearbeitet: James Tursa
am 1 Feb. 2021
result = sum(x.*(inv(SIG)*x));
or
result = sum(x.*(SIG\x));
1 Kommentar
Bruno Luong
am 1 Feb. 2021
In case complex data
result = sum(conj(x).*(SIG\x));
Weitere Antworten (1)
J Chen
am 1 Feb. 2021
Try x'*inv(SIG)*x. Matlab can directly handle vectors and matrices.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!