# Getting error while deleting every row of the matrix M that contains the variable x

1 view (last 30 days)
Ningze Xia on 1 May 2021
Commented: Ningze Xia on 1 May 2021
I'm trying to write a function N = Deletevar(x,M) that returns a matrix N by deleting every row of the matrix M that contains the variable x.
My code is :
function N = Delete_var(x,M)
N = [];
[a,b] = size(M);
for i = 1:a
for j = 1:b
if M(i,j)== x
M(i,:)=[];
N = M;
end
end
end
end
However when i call Delete_var(3,[1,2,3;3,4,5;7,8,9]), I get:
Index in position 1 exceeds array bounds (must not exceed 2).
Error in Delete_var (line 9)
if M(i,j)== x
##### 2 CommentsShowHide 1 older comment
Ningze Xia on 1 May 2021
Ohhhh I understand what you mean! Combined your comment and per isakson's answer I successfully solve the problem! Thank you for your help!

per isakson on 1 May 2021
Edited: per isakson on 1 May 2021
The trick is to iterate in reverse order, i.e a:-1:1 instead of 1:a. Try this
%%
M = magic(5);
x = 13;
N = Delete_var(x,M)
N = 4×5
17 24 1 8 15 23 5 7 14 16 10 12 19 21 3 11 18 25 2 9
%%
function N = Delete_var(x,M)
N = [];
[a,b] = size(M);
for i = a:-1:1
for j = b:-1:1
if M(i,j)== x
M(i,:)=[];
N = M;
end
end
end
end
Ningze Xia on 1 May 2021
Perfectly solve my problem! Thanks a lot!

Turlough Hughes on 1 May 2021
No need for any loops. Here's an example of data to work with
M = randi(10,[10 3]); % sample data
x = 3; % delete rows with this value
You can delete any rows in M containing x as follows:
M(any(M==x,2),:)=[];
Ningze Xia on 1 May 2021
Thank you for your answer! This is a new techinique for me and it's very useful! Really appreciate!