Hi, I have a nested struct
userTouristicTraj(1).touristicData(:).traj --> [1;1][1;1;1;1;1][1;1;1;1][1;1;1;1;1;1];[1;1];
userTouristicTraj(2).touristicData(:).traj --> [4;4][5;5]
userTouristicTraj(3).touristicData(:).traj --> [12;12;12;12;6][12;12]
and I want to trasform it in a matrix
A= [1 1 0 0 0 0; 1 1 1 1 1 0; 1 1 1 1 0 0; 1 1 1 1 1 1; 1 1 0 0 0 0; 4 4 0 0 0 0; 5 5 0 0 0 0; 12 12 12 12 6 0; 12 12 0 0 0 0]
I have try to use the functions struc2cell and cell2mat but the code doesn't run and maybe I have to use a different way
a=struct2cell(userTouristicTraj);
b=cell2mat(a);
Error using cell2mat (line 64)
The field names of each cell array element must be consistent and in consistent order.
Can you help me, please? thanks

 채택된 답변

Guillaume
Guillaume 2017년 6월 5일
편집: Guillaume 2017년 6월 5일

0 개 추천

Assuming that all your structures have the same fields in all the substructures:
alltdata = [userTouristicTraj.touristicData]; %concatenate all touristicData into a single structure
alltraj = {alltdata.traj}; %and extract all traj into a cell array
maxlength = max(cellfun(@numel, alltraj));
alltraj = cellfun(@(v) [v.', zeros(1, maxlength - numel(v))], alltraj, 'UniformOutput', false) %pad as necessary
alltraj = vertcat(alltraj{:});

댓글 수: 4

the code gives an error
Error using horzcat
Dimensions of matrices being concatenated are not consistent.
Error in @(v)[v,zeros(maxlength-numel(v),1)]
Guillaume
Guillaume 2017년 6월 5일
Sorry, I missed that your vectors were column vectors (which you want transposed as row vectors).
I've fixed the code.
elisa ewin
elisa ewin 2017년 6월 5일
thanks for your help; I have tried the new code but it gives the same error
Guillaume
Guillaume 2017년 6월 5일
Hopefully, fixed for good this time.

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Cell Arrays에 대해 자세히 알아보기

질문:

2017년 6월 5일

편집:

2017년 6월 5일

Community Treasure Hunt

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

Start Hunting!

Translated by