MATLAB Answers

Nancy
3

Delete row from Matrix

Asked by Nancy
on 21 Jun 2012
Latest activity Answered by Drew Closner on 10 Oct 2016

I have a Matrix of 400 rows and 40 columns. I want to completely remove rows 3 and 9 to get a matrix with 398 rows. How can I do it in MATLAB.

6 Answers

Answer by Jan Simon
on 22 Jun 2012
Edited by Jan Simon
on 16 Apr 2016
 Accepted Answer

Timings:

x = rand(100, 100);
tic;
for i = 1:1e4
  y = x;
  y([3, 9], :) = [];
  clear('y');   % distract the JIT
end
toc   % Elapsed time is 0.594352 seconds
tic;
for i = 1:1e4
  y = x;
  y(9, :) = [];
  y(3, :) = [];
  clear('y');   % distract the JIT
end
toc  %  Elapsed time is 0.783146 seconds, two data copies
tic;
for i = 1:1e4
  y = x(setdiff(1:size(x,1), [3,9]), :);
  clear('y');   % distract the JIT
end
toc  % Elapsed time is 1.892520 seconds, SETDIFF overhead and numerical indexing
tic;
for i = 1:1e4
  y = x(~ismember(1:size(x,1), [3,9]), :);
  clear('y');   % distract the JIT
end
toc  % Elapsed time is 1.081171 seconds, faster logical indexing
tic;
for i = 1:1e4
  index = true(1, size(x, 1));
  index([3, 9]) = false;
  y = x(index, :);
  clear('y');   % distract the JIT
end
toc  % Elapsed time is 0.379877 seconds

Measured under Matlab2009a/64, Win7 => Advantage for the logical indexing method.

Timings for 2011b/64, Win7:

Elapsed time is 0.481238 seconds.
Elapsed time is 0.669098 seconds.
Elapsed time is 1.909885 seconds.
Elapsed time is 0.838608 seconds.
Elapsed time is 0.304096 seconds.

[EDITED] Timings for R2015b, same machine:

Elapsed time is 0.599108 seconds.   slower
Elapsed time is 0.873113 seconds.   slower
Elapsed time is 2.192391 seconds.   slower
Elapsed time is 0.734789 seconds.   faster
Elapsed time is 0.487023 seconds.   slower

  0 Comments

Log in to comment.


Answer by Peter
on 30 Nov 2012

"I have a Matrix of 400 rows and 40 columns.I want to completely remove rows 3 and 9 to get a matrix with 398 rows. How can I do it in MATLAB."

Matrix_2 = Matrix_1( [1:2,4:8,10:end] , : )

Best,

Pete

  0 Comments

Log in to comment.


Answer by Dan W
on 23 Jan 2015

I'm not sure if this is new syntax or not, but it works with R2012a and it's fast and simple.

x = rand(100);
tic;
x([3,9],:) = [];
toc; % Elapsed time is 0.000230 seconds.

  3 Comments

Thanks, this works pretty easy. But I have a problem where the elements to remove are decided dynamically. So, I have a matrix m1 of size 100 X 100. And another matrix m2 of size 10X1. m2 has the row number to remove from m1 (they are not in any order). What is the best way to do this ?

Eg: m1 = rand(100); m2 = [1,6,4,8,10]; (this is the output of another function call).

Hi Mehul! It new question.

out = m1;
out(m2,:) = [];

Log in to comment.


Answer by Andrei Bobrov
on 21 Jun 2012

m = m(setdiff(1:size(m,1),[3,9]),:);

  5 Comments

It copies the rows of m that are _not_ row 3 or 9.

SETDIFF has a remarkable overhead. ISMEMBER is smarter and twice as fast for a 100x100 matrix:
m = m(~ismember(1:size(m, 1), [3,9]), :);

@ Andrei Bobrov , @ Walter Roberson,@ Jan Simson . how delete a particular row and column of a matrix by using "setdiff" . Say m= [1 2 3 4 ; 5 6 7 8; 9 10 11 12 ; 13 14 15 16 ]. i want to delete 1st row and 2nd column to obtain m=[5 7 8; 9 11 12;13 15 16]

Log in to comment.


Answer by Alireza Rezvani on 19 Jun 2016

sry, how i can Deleting individual columns of a matrix, any body know?

  1 Comment

Assume out is your matrix and you want to delete its first column, try this code,

out(:,1) = [];

Log in to comment.


Answer by Drew Closner on 10 Oct 2016

So I have to make a function that is able to delete a row in a matrix [I have 3 by 3]. I am not sure how to do this, please leave any help you can!

  0 Comments

Log in to comment.


Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Win prizes and improve your MATLAB skills

Play today