I want to delete rows from a matrix but its giving me the error "Matrix index is out of range for deletion"
Show older comments
percentage_consumo= Preos2013S1(:,6)/maxconsumo;
percentage_precos= Preos2013S1(:,21)/maxpreco;
b = cellfun(@(x)str2double(x), teste1);
b2=b;
for k=2:length(teste1)
if b(k)~= 0
percentage_consumo(k,:) = [];
percentage_precos(k,:) = [];
b2(k)=[];
end
end
i=0;
for k=2:length(Preos2013S1(:,6))
if b(k)~=0
i=i+1;
end
end
All this arrays of doubles have the same size (6266x1). Besides the error that I don't understand, b2 still has a lot of rows with numbers that are not 0. And since i=2447, b2 should be 3819x1; however, its 4503x1. Can somebody please help me?
Accepted Answer
More Answers (1)
Kaushik Godbole
on 22 Apr 2022
Hello Eduardo,
The method suggested by Mathew works. However for some reason if you are required to iterate forward and still delete rows/columns in a 'for' loop and you know those rows/cloumns with reference to the original unmodified matrix, then you need to include a counter which keeps track of how many rows have been deleted. The following code illustrates how to delete only the even rows of a matrix while iterating forward. You can modify it for any 'if' condition you want.
n = 10;
A = rand(n,n);
counter = 0; %% Declaring counter to be zero
for number = 1:n
if rem(number,2) == 0
A(number - counter,:) = []; %% Takes care of changing index numbers of the rows
counter = counter + 1; %% Takes into account row deletion
end
end
Categories
Find more on Operators and Elementary Operations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!