Replacing a for loop with matrix multiplication
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Jessica Nadalin
el 1 de Feb. de 2021
Comentada: Bruno Luong
el 1 de Feb. de 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 comentario
Respuesta aceptada
James Tursa
el 1 de Feb. de 2021
Editada: James Tursa
el 1 de Feb. de 2021
result = sum(x.*(inv(SIG)*x));
or
result = sum(x.*(SIG\x));
1 comentario
Bruno Luong
el 1 de Feb. de 2021
In case complex data
result = sum(conj(x).*(SIG\x));
Más respuestas (1)
J Chen
el 1 de Feb. de 2021
Try x'*inv(SIG)*x. Matlab can directly handle vectors and matrices.
0 comentarios
Ver también
Categorías
Más información sobre Resizing and Reshaping Matrices en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!