Avoiding for loops for multiplication of multidimensional matrices

I have to do a matrix multiplication of two vectors in principle to get a scalar. The vectors are (1 x 2) and (2 x 1). However, I need to do this for a lot of cases. Those cases are defined in matrix form like the following.
for i = 1:Niter
for k = 1:Cn
for ti = 1:T
E(i, k, ti) = [D(ti, :) - squeeze(y(i, k, ti, :)).'] * [D(ti, :) - squeeze(y(i, k, ti, :)).'].'
end
end
end
So, `D` is a matrix with T x 2 size, y is a 4D matrix with size `Niter x Cn x T x 2`. Is there a way to avoid these for loops? I just want to compute the row and column vectors for all different cases `Niter`, `Cn` and `T`.

 Respuesta aceptada

Matt J
Matt J el 1 de Jun. de 2022
Editada: Matt J el 1 de Jun. de 2022
D=reshape(D,1,1,T,2);
E=vecnorm(D-y,2,4).^2;

3 comentarios

Thank you for the answer. Amazing. I think the 4th argument is 4, right? If I do 3, it does it in the 3rd axis. I still need T as the 3rd dimension for E. E should be [Niter x Cn x T].
The 3rd argument to vecnomr should have been 4, correct.
Sorry yes, I meant the 3rd argument.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.

Preguntada:

el 1 de Jun. de 2022

Comentada:

el 1 de Jun. de 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by