assign the same vector to be the same cell
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
ha ha
am 21 Nov. 2018
Kommentiert: ha ha
am 24 Nov. 2018
Let's say, I have the matrix:
A=[x,y]=[1 2;1.1 2;1.2 2;1 3;1.1 3;1.2 3;1 4;1.1 4;1.2 4];
If i wanna group all vector having the same value of y coordinate. How can I do that?
Example, the result like that:
Cell1=[1 2
1.1 2
1.2 2]
Cell2=[1 3
1.1 3
1.2 3]
Cell3=[1 4
1.1 4
1.2 4]
2 Kommentare
madhan ravi
am 23 Nov. 2018
People here put some efforts to help you and you mercilessly close the question without clarifying how rude
Akzeptierte Antwort
madhan ravi
am 21 Nov. 2018
Bearbeitet: madhan ravi
am 21 Nov. 2018
A=[1 2;1.1 2;1.2 2;1 3;1.1 3;1.2 3;1 4;1.1 4;1.2 4]';
group=reshape(A,2,3,3);
CELL=cell(1,3);
for i = 1:size(group,3)
CELL{i}=group(:,:,i)';
end
celldisp(CELL)
command window:
>>
CELL{1} =
1.0000 2.0000
1.1000 2.0000
1.2000 2.0000
CELL{2} =
1.0000 3.0000
1.1000 3.0000
1.2000 3.0000
CELL{3} =
1.0000 4.0000
1.1000 4.0000
1.2000 4.0000
>>
Weitere Antworten (2)
Andrei Bobrov
am 21 Nov. 2018
Cell = mat2cell(A,accumarray(findgroups(A(:,2)),1),size(A,2));
0 Kommentare
Guillaume
am 21 Nov. 2018
Bearbeitet: Guillaume
am 21 Nov. 2018
Can be done easily with findgroups (or the older unique) and splitapply (or the older accumarray), in just one line:
A = [1 2;1.1 2;1.2 2;1 3;1.1 3;1.2 3;1 4;1.1 4;1.2 4];
C = splitapply(@(rows) {A(rows, :)}, (1:size(A, 1))', findgroups(A(:, 2)));
celldisp(C)
with unique and accumarray, you need two lines as you need the 3rd return value of unique:
A = [1 2;1.1 2;1.2 2;1 3;1.1 3;1.2 3;1 4;1.1 4;1.2 4];
[~, ~, id] = unique(A(:, 2));
C = accumarray(id, (1:size(A, 1))', [], @(rows) {A(rows, :)});
celldisp(C)
0 Kommentare
Siehe auch
Kategorien
Mehr zu Spreadsheets finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!