splitting matrix based on a value in one column

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.

 Respuesta aceptada

Stephen23
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

7 comentarios

Thomas Booij
Thomas Booij el 16 de Jun. de 2018
Thanks a lot!
Aleem Akhtar
Aleem Akhtar el 30 de Sept. de 2018
That was great solution. You saved day for me.
Thanks a lot for the answer.
Joshua
Joshua el 8 de Jul. de 2020
Editada: Joshua el 8 de Jul. de 2020
Great solution! How would you do this for the transpose of M? I.e. if I had the array M' and wanted to sort the columns into a cell matrix of arrays?
Chris Stillo
Chris Stillo el 15 de Dic. de 2020
Thank god someone knows what they are doing!
Pol Medir
Pol Medir el 22 de Feb. de 2021
How would you do this if the sample of data was too large to input manually?

Iniciar sesión para comentar.

Más respuestas (1)

123456
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
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.

Iniciar sesión para comentar.

Categorías

Preguntada:

el 17 de Jun. de 2017

Comentada:

el 22 de Feb. de 2021

Community Treasure Hunt

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

Start Hunting!

Translated by