Create a 3D matrix from multiple 1D vectors without FOR loop

조회 수: 9 (최근 30일)
fsgeek
fsgeek 2017년 9월 27일
댓글: Javier Fernandez 2020년 12월 9일
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
KSSV
KSSV 2017년 9월 27일
But the loop you showed, will give you a 2D matrix..not 3D.
fsgeek
fsgeek 2017년 9월 27일
I have corrected my original question to reflect the correct behaviour!
Thanks,
Louis

댓글을 달려면 로그인하십시오.

채택된 답변

Matt J
Matt J 2017년 9월 27일
편집: Matt J 2017년 9월 27일
St=reshape( [Sxxi;Txyi;Txzi; Txyi;Syyi;Tyzi; Txzi;Tyzi;Syyi] , 3,3,[])
  댓글 수: 2
fsgeek
fsgeek 2017년 9월 27일
This method works perfectly. I feel embarrassed that I didn't see it earlier!
Thanks,
Louis
Javier Fernandez
Javier Fernandez 2020년 12월 9일
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

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Stephen23
Stephen23 2017년 9월 27일
편집: Stephen23 2017년 9월 27일
St = zeros(3,3,L);
St(1,1,:) = Sxxi;
St(1,2,:) = Txyi;
St(1,3,:) = Txzi;
St(2,1,:) = Txyi;
St(2,2,:) = Syyi;
St(2,3,:) = Tyzi;
St(3,1,:) = Txzi;
St(3,2,:) = Tyzi;
St(3,3,:) = Szzi;

카테고리

Help CenterFile Exchange에서 Stress and Strain에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by