Using pagemtimes multiplying from left and right side
3 次查看(过去 30 天)
显示 更早的评论
I have a 3D array I need to multiply on left and right sides by a constant 3x3 matrix, take a cholesky decomposition and multiply it by a random vector, I am trying to avoid for loops. The arrays are P 6x6xN and F 3x6. The equivalent for loop multiplication is
for i=1:length(Pf)
w = chol(Fn*Pf(:,:,i)*Fn')*randn(3,1);
out(:,i) = out(:,i) + w;
end
0 个评论
回答(1 个)
Felipe Padua
2022-8-29
You can use pagemtimes to perform both multiplications but, since chol accept only matrices (2D arrays) as arguments, you'll still need a loop. Try the code below:
n = size(Pf, 3);
aux = pagemtimes(Fn, Pf);
aux = pagemtimes(aux, Fn');
for i = 1:n
aux (:,:,i) = chol(aux(:,:,i));
end
aux = pagemtimes(aux, rand(3,1,n));
If you desire retrieve the steps taken, you may avoid overwriting the aux variable renaming the sucessive results as aux1, aux2 etc, or other names of your preference.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!