splitting matrix based on a value in one column

9 vues (au cours des 30 derniers jours)
masih
masih le 17 Juin 2017
Commenté : Stephen23 le 22 Fév 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.

Réponse acceptée

Stephen23
Stephen23 le 17 Juin 2017
Modifié(e) : Stephen23 le 17 Juin 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 commentaires
Pol Medir
Pol Medir le 22 Fév 2021
How would you do this if the sample of data was too large to input manually?
Stephen23
Stephen23 le 22 Fév 2021

Connectez-vous pour commenter.

Plus de réponses (1)

123456
123456 le 18 Juil 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 commentaire
Stephen23
Stephen23 le 19 Juil 2018
There are several solutions. One way is to input the first column into unique, and use its third output with my answer.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by