omit rows of matrix based on a condition

1 vue (au cours des 30 derniers jours)
Pooneh Shah Malekpoor
Pooneh Shah Malekpoor le 15 Oct 2022
Commenté : David Hill le 15 Oct 2022
Hello
My matrix B is :
[0.25 0 0;
0.5 -4.91 -4.9;
0.75 -4.94 -4.96;
1 -4.985 -5;
1.25 -5 -5;
1.5 -5 -5;
1.75 -5 -5]
How to write a code to omit all the rows (except from first row and fifth row 1.25,-5,-5) where column 2 and three are equal. I mean keep the first and fifth row where column 2 and 3 are equal but omit other rows with the same situation.

Réponse acceptée

David Hill
David Hill le 15 Oct 2022
Modifié(e) : David Hill le 15 Oct 2022
Seems like there are more than just two rows.
B=[0.25 0 0;
0.5 -4.91 -4.9;
0.75 -4.94 -4.96;
1 -4.985 -5;
1.25 -5 -5;
1.5 -5 -5;
1.75 -5 -5];
[~,idx]=unique(B(:,2),'stable');
C=B(idx,:);
C(C(:,2)~=C(:,3),:)=[];
C
C = 2×3
0.2500 0 0 1.2500 -5.0000 -5.0000
  2 commentaires
Pooneh Shah Malekpoor
Pooneh Shah Malekpoor le 15 Oct 2022
Thanks, Then how to get [0.25 0 0;
0.5 -4.91 -4.9;
0.75 -4.94 -4.96;
1 -4.985 -5;
1.25 -5 -5]???
David Hill
David Hill le 15 Oct 2022
B=[0.25 0 0;
0.5 -4.91 -4.9;
0.75 -4.94 -4.96;
1 -4.985 -5;
1.25 -5 -5;
1.5 -5 -5;
1.75 -5 -5];
[~,idx]=unique(B(:,2),'stable');
C=B(idx,:)
C = 5×3
0.2500 0 0 0.5000 -4.9100 -4.9000 0.7500 -4.9400 -4.9600 1.0000 -4.9850 -5.0000 1.2500 -5.0000 -5.0000

Connectez-vous pour commenter.

Plus de réponses (2)

Torsten
Torsten le 15 Oct 2022
B = [0.25 0 0;
0.5 -4.91 -4.9;
0.75 -4.94 -4.96;
1 -4.985 -5;
1.25 -5 -5;
1.5 -5 -5;
1.75 -5 -5];
B = B(union(find(B(:,2)~=B(:,3)),[1 5]),:)
B = 5×3
0.2500 0 0 0.5000 -4.9100 -4.9000 0.7500 -4.9400 -4.9600 1.0000 -4.9850 -5.0000 1.2500 -5.0000 -5.0000

Ghazwan
Ghazwan le 15 Oct 2022
%If you already know that you need to omit the first and last row only
A=A(2:end-1,:);
%If you do not know which rows have the condition
for ii=1:length(A(:,1))
if A(ii,2)==A(ii,3) %Your condition
A(ii,:)=[]; %omitting the row that meets the condition
end
end
  1 commentaire
Pooneh Shah Malekpoor
Pooneh Shah Malekpoor le 15 Oct 2022
Thanks but it keeps the last row while I want it to keep the first row with equal arrays in column 2 and 3 (I mean I want a for loop which keep the fifth row). How?

Connectez-vous pour commenter.

Catégories

En savoir plus sur Resizing and Reshaping Matrices 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