splitting matrix based on a value in one column
19 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
masih
el 17 de Jun. de 2017
Comentada: Stephen23
el 22 de Feb. de 2021
Hi All,
I have a very large matrix part of which looks like this:
7 0
10 0
16 0
19 1
26 1
29 1
3 1
5 0
69 0
36 0
78 0
as you can see, the second column is either 0 or 1. I want to split this large matrix into sub matrices such that each sub matrix represent only the parts where the second column is 0. How do we do this? Thanks.
0 comentarios
Respuesta aceptada
Stephen23
el 17 de Jun. de 2017
Editada: Stephen23
el 17 de Jun. de 2017
Hard-coded indexing:
>> M = [7,0;10,0;16,0;19,1;26,1;29,1;3,1;5,0;69,0;36,0;78,0];
>> M(M(:,2)==0,:)
ans =
7 0
10 0
16 0
5 0
69 0
36 0
78 0
>> M(M(:,2)==1,:)
ans =
19 1
26 1
29 1
3 1
General solution:
>> [~,~,X] = unique(M(:,2));
>> C = accumarray(X,1:size(M,1),[],@(r){M(r,:)});
>> C{1}
ans =
7 0
10 0
16 0
36 0
69 0
78 0
5 0
>> C{2}
ans =
26 1
19 1
29 1
3 1
Más respuestas (1)
123456
el 18 de Jul. de 2018
How could I do the same thing but divide cell array by strings from one row? Let's say, that the array looks like that:
t2 1 2
t2 2 3
t1 3 4
t2 4 5
t1 5 6
t1 6 7
I would like to recieve two arrays at the end:
1 2
2 3
4 5
and
3 4
5 6
6 7
1 comentario
Stephen23
el 19 de Jul. de 2018
There are several solutions. One way is to input the first column into unique, and use its third output with my answer.
Ver también
Categorías
Más información sobre Matrix Indexing 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!