Working with cell arrays
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
L'O.G.
el 5 de Mayo de 2023
Comentada: Stephen23
el 8 de Mayo de 2023
I would like to separate columns in an array based on the unique values of the first column. I think the way to do this is a cell array since the vectors would be of different length. Is there a way to vectorize this? For example, the following array
example = [
5 2.3 1.7
5 0.2 9.1
99 3.3 3.6
99 4.1 3.2
99 5.1 2.2
103 1.1 6.8
];
should give
A{1} = [2.3,0.2];
A{2} = [3.3,4.1,5.1];
A{3} = [1.1];
B{1} = [1.7,9.1];
B{2} = [3.6,3.2,2.2];
B{3} = [6.8];
(since there are three unique values in column 1 of the example)
0 comentarios
Respuesta aceptada
Paul
el 5 de Mayo de 2023
example = [
5 2.3 1.7
5 0.2 9.1
99 3.3 3.6
99 4.1 3.2
99 5.1 2.2
103 1.1 6.8
];
G = findgroups(example(:,1));
A = splitapply(@(x) mat2cell(x,numel(x)),example(:,2),G);
B = splitapply(@(x) mat2cell(x,numel(x)),example(:,3),G);
A,B
A{1}
B{1}
1 comentario
Stephen23
el 8 de Mayo de 2023
Also without the MAT2CELL call:
X = [
5 2.3 1.7
5 0.2 9.1
99 3.3 3.6
99 4.1 3.2
99 5.1 2.2
103 1.1 6.8
];
G = findgroups(X(:,1));
A = accumarray(G,X(:,2),[],@(a){a});
B = accumarray(G,X(:,3),[],@(a){a});
A,B
A{1}
B{1}
Más respuestas (0)
Ver también
Categorías
Más información sobre Logical 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!