Extract row elements corresponding to a particular column value and save as new matrix
Mostrar comentarios más antiguos
I have a Mx4 matrix with the following format:
a1 b1 c d1
a2 b2 c d2
a3 b3 c d3
a4 b4 c1 d4
a5 b5 c1 d5
and what i want to do is create new matrices corresponding to the different c values in the third column renaming this matrix matc.
Any help would be really appreciated Sarah
Respuestas (2)
Azzi Abdelmalek
el 14 de Mzo. de 2013
Editada: Azzi Abdelmalek
el 14 de Mzo. de 2013
b=A(:,3)
b(b==c)=yourvalue
A(:,3)=b
17 comentarios
Sarah
el 14 de Mzo. de 2013
Azzi Abdelmalek
el 14 de Mzo. de 2013
How do you want to replace these c numbers?
Sarah
el 14 de Mzo. de 2013
Sarah
el 14 de Mzo. de 2013
Azzi Abdelmalek
el 14 de Mzo. de 2013
Editada: Azzi Abdelmalek
el 14 de Mzo. de 2013
If A=[ 2 3 4 6
4 8 7 9
5 2 7 1
4 2 2 3]
What should be the result?
Azzi Abdelmalek
el 14 de Mzo. de 2013
Editada: Azzi Abdelmalek
el 14 de Mzo. de 2013
A=[ 2 3 4 6
4 8 7 9
5 2 7 1
4 2 2 3]
A=sortrows(A,3)
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
assignin('base',sprintf('mat%d',c(k)),A(idx,:))
end
%Check the matrices mat2, mat4 and mat7
Sarah
el 14 de Mzo. de 2013
Azzi Abdelmalek
el 14 de Mzo. de 2013
But if you have three values of c: 1.8, 2 and 2.6 how will you round?
Azzi Abdelmalek
el 14 de Mzo. de 2013
Editada: Azzi Abdelmalek
el 14 de Mzo. de 2013
What I suggest is using cell array
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
out{k}=A(idx,:)
end
then check
out{1}
out{2}
out{3}
Sarah
el 14 de Mzo. de 2013
Azzi Abdelmalek
el 14 de Mzo. de 2013
What about the cell array solution?
Sarah
el 14 de Mzo. de 2013
Azzi Abdelmalek
el 14 de Mzo. de 2013
Editada: Azzi Abdelmalek
el 14 de Mzo. de 2013
Did you check the cell array solution? You do not need to create such variables
Sarah
el 14 de Mzo. de 2013
Azzi Abdelmalek
el 14 de Mzo. de 2013
Check this :
clear out
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
out{k,2}=A(idx,:)
out{k,1}=c(k)
end
out{1,1}, % is c1
out{1,2} % corresponding to c1
out{2,1}, % is c2
out{2,2} % corresponding to c2
and so on
Sarah
el 14 de Mzo. de 2013
Azzi Abdelmalek
el 14 de Mzo. de 2013
Editada: Azzi Abdelmalek
el 14 de Mzo. de 2013
% Check this: for c=2.4 the variable will be mat2p4 instead of mat2.4
A= [ 2 3 4 6
4 8 7 9
5 2 7 1
4 2 2.4 3]
A=sortrows(A,3)
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
s=num2str(c(k))
s=strrep(s,'.','p')
assignin('base',['mat' s],A(idx,:))
end
Check the result
mat2p4
mat4
mat7
Sarah
el 14 de Mzo. de 2013
Categorías
Más información sobre Logical en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!