Create a 3D matrix from multiple 1D vectors without FOR loop
8 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
fsgeek
el 27 de Sept. de 2017
Comentada: Javier Fernandez
el 9 de Dic. de 2020
Hello everyone,
I would like to construct a three-dimensional 3x3xL matrix from a series of one-dimensional vectors.
So far I achieve this with the following code:
St = zeros(3.0, 3.0, L);
for i = 1:L
St(:, :, i) = [Sxxi(i), Txyi(i), Txzi(i);...
Txyi(i), Syyi(i), Tyzi(i);...
Txzi(i), Tyzi(i), Szzi(i)];
end
Where each of the six tensor components is a vector of size 1xL. I find this code to be quite silly and unnecessarily slow.
I'm wondering if there's a way to concatenate the six components into the 3x3xL matrix without using a FOR loop? At fist glance it looks like this might be achievable with CAT() but I'm not sure how this would work.
The parameter L is arbitrary so I'm trying to develop a solution which works for any length.
Thanks in advance,
Louis Vallance
4 comentarios
Respuesta aceptada
Matt J
el 27 de Sept. de 2017
Editada: Matt J
el 27 de Sept. de 2017
St=reshape( [Sxxi;Txyi;Txzi; Txyi;Syyi;Tyzi; Txzi;Tyzi;Syyi] , 3,3,[])
2 comentarios
Javier Fernandez
el 9 de Dic. de 2020
Sorry for reviving old threads, but I would like to point out that the given solution
St=reshape( [Sxxi;Txyi;Txzi; Txyi;Syyi;Tyzi; Txzi;Tyzi;Syyi] , 3,3,[])
is not fully correct because it actually gives the transpose of the expected result. In this case it makes no difference because the input tensor is symmetric and thus, it actually works.
The correct solution for non-symmetric matrices would need to account for that transpose by using permute as:
St=permute( reshape( [Sxxi;Txyi;Txzi; Txyi;Syyi;Tyzi; Txzi;Tyzi;Syyi] , 3,3,[]) , [2,1,3])
Javier
Ver también
Categorías
Más información sobre Stress and Strain en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!