How to define the variable which contain multiple double data?
14 views (last 30 days)
Show older comments
Hello, I am not familar with MATLAB and I need advice from many experienced people.
I have multiple double arrays in my A structure (11x1 structure).
A structure have [?x2 double] format and I want to sort with 2nd column of all [A(1),A(2), ... A(11)] and merge all that sorted data in one variable.
I did it 1 by 1 and I got a data which I want, but it is such a long code and stupid way.
Does anyone have an idea how to summarize my code?
And my final goal is to define these 2 coulmns by x and y coordinates.
% Select n-th row of A and make double array and sort with 2nd column
A1 = vertcat(A(1).Groups); % size(A1) = 5 2
A1_1 = sortrows(A1,[2]);
A2 = vertcat(A(2).Groups); % size(A2) = 8 2
A2_1 = sortrows(A2,[2]);
A3 = vertcat(A(3).Groups); % size(A3) = 9 2
A3_1 = sortrows(A3,[2]);
A4 = vertcat(A(4).Groups); % size(A4) = 10 2
A4_1 = sortrows(A4,[2]);
A5 = vertcat(A(5).Groups); % size(A5) = 10 2
A5_1 = sortrows(A5,[2]);
A6 = vertcat(A(6).Groups); % size(A6) = 10 2
A6_1 = sortrows(A6,[2]);
A7 = vertcat(A(7).Groups); % size(A7) = 10 2
A7_1 = sortrows(A7,[2]);
A8 = vertcat(A(8).Groups); % size(A8) = 10 2
A8_1 = sortrows(A8,[2]);
A9 = vertcat(A(9).Groups); % size(A9) = 8 2
A9_1 = sortrows(A9,[2]);
A10 = vertcat(A(10).Groups); % size(A10) = 6 2
A10_1 = sortrows(A10,[2]);
A11 = vertcat(A(11).Groups); % size(A11) = 1 2
A11_1 = sortrows(A11,[2]);
% Merge all sorted A(n) in one variable
CenA1 = [A1_1;A2_1;A3_1;A4_1;A5_1;A6_1;A7_1;A8_1;A9_1;A10_1;A11_1];
% Separate these sorted coulmns by x and y coordinate
xcen1 = CenA1(:,1);
ycen1 = CenA1(:,2);
0 Comments
Accepted Answer
dpb
on 4 Aug 2019
You were almost there...since each element in the struct array has just 2 columns, they can be catenated vertically--so convert the struct to an array like you were doing except do it globally...
XY=vertcat(A.Groups);
Now if it is needed to actually sort within the individual arrays, use a loop to sort first...unfortunately, structfun won't work on a struct array and arrayfun expects every array to be same size so have to write the explicit loop here...but that's not hard--
for i=1:numel(A)
A(i).Groups=sortrows(A(i).Groups,2);
end
and first, then catenate the result.
More Answers (0)
See Also
Categories
Find more on Structures in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!