Effacer les filtres
Effacer les filtres

How can I delete row based on the value of row (i) and row (i+1)

1 vue (au cours des 30 derniers jours)
Hi I am new to matlab, I am working with 1000*10 matrix. I want to delete the all row if the value in row (i) column 10 is the same as the value in row (i+1) column 10, and keep the row if the value in row (i) column 10 is not equal to the value in row (i+1) column 10. For example: my data file is X. and my code is, but it does not work with me :
for i=1:length (X)
if (X(i,10)~=X(i+1,10)
y(j,1:10)= X(i,1:10);
j=j+1;
else
y(j,1:10)=[];
end
if true
% code
end
end

Réponse acceptée

James Tursa
James Tursa le 25 Oct 2018
Modifié(e) : James Tursa le 25 Oct 2018
I think this is what you are asking for (i.e., delete all rows that have equal neighbors in column 10):
X = your matrix
n = 10; % the column to use for the comparison
d = diff(X(:,n)); % the 0's in d indicate where neighbors are equal to each other
d = [d;1] .* [1;d]; % vector that has 0's for all rows that are equal to neighbors
X(~d,:) = []; % delete the rows that have equal neighbors using logical indexing

Plus de réponses (1)

madhan ravi
madhan ravi le 25 Oct 2018
for i=1:length (X)
if (X(i,10)~=X(i+1,10)
y(i,:)= X(i,:);
else
y(i,:)=[];
end
end
  2 commentaires
madhan ravi
madhan ravi le 25 Oct 2018
Modifié(e) : madhan ravi le 26 Oct 2018
Note: I didn’t per-allocate the array because the resultant matrix is unknown since you didn’t provide data but if you know the resultant matrix you can simply do
y =zeros(1000,10)
Gadelhag M Omar Mohmed
Gadelhag M Omar Mohmed le 29 Oct 2018
thanks for your help

Connectez-vous pour commenter.

Catégories

En savoir plus sur Creating and Concatenating 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