Extract row elements corresponding to a particular column value and save as new matrix
Ältere Kommentare anzeigen
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
Antworten (2)
Azzi Abdelmalek
am 14 Mär. 2013
Bearbeitet: Azzi Abdelmalek
am 14 Mär. 2013
b=A(:,3)
b(b==c)=yourvalue
A(:,3)=b
17 Kommentare
Sarah
am 14 Mär. 2013
Azzi Abdelmalek
am 14 Mär. 2013
How do you want to replace these c numbers?
Sarah
am 14 Mär. 2013
Sarah
am 14 Mär. 2013
Azzi Abdelmalek
am 14 Mär. 2013
Bearbeitet: Azzi Abdelmalek
am 14 Mär. 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
am 14 Mär. 2013
Bearbeitet: Azzi Abdelmalek
am 14 Mär. 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
am 14 Mär. 2013
Azzi Abdelmalek
am 14 Mär. 2013
But if you have three values of c: 1.8, 2 and 2.6 how will you round?
Azzi Abdelmalek
am 14 Mär. 2013
Bearbeitet: Azzi Abdelmalek
am 14 Mär. 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
am 14 Mär. 2013
Azzi Abdelmalek
am 14 Mär. 2013
What about the cell array solution?
Sarah
am 14 Mär. 2013
Azzi Abdelmalek
am 14 Mär. 2013
Bearbeitet: Azzi Abdelmalek
am 14 Mär. 2013
Did you check the cell array solution? You do not need to create such variables
Sarah
am 14 Mär. 2013
Azzi Abdelmalek
am 14 Mär. 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
am 14 Mär. 2013
Azzi Abdelmalek
am 14 Mär. 2013
Bearbeitet: Azzi Abdelmalek
am 14 Mär. 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
am 14 Mär. 2013
Kategorien
Mehr zu Logical finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!