Replacing a for loop with matrix multiplication
3 views (last 30 days)
Show older comments
Jessica Nadalin
on 1 Feb 2021
Commented: Bruno Luong
on 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 Comment
Accepted Answer
James Tursa
on 1 Feb 2021
Edited: James Tursa
on 1 Feb 2021
result = sum(x.*(inv(SIG)*x));
or
result = sum(x.*(SIG\x));
1 Comment
More Answers (1)
See Also
Categories
Find more on Resizing and Reshaping Matrices in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!