# Deleting Rows of a Matrix

2 views (last 30 days)
hamzah khan on 25 Jun 2020
Commented: hamzah khan on 26 Jun 2020
Hello,
I have a 1D matrix or an array, I have attached files. I have to delete its rows, such that starting from 4 till 6, then 10 to 12, then 16 till 18 and so on...
so basically leave three and then delete three.. leave 1 2 3 delete 4 5 6 then leave 7 8 9 delete 10 11 12... and going on till the last of matrix
The problem I am having is in defining the variable X which tells how long will this loop run for until all the required rows are deleted.
[V,D] = eigs(Stiffness_Global,Mass_Global,1,'smallestabs')
X =
a =4;
for i =1:1:X
for j =a:1:(a+2)
V(j,: )=[];
end
a = a+4
end
Does anyone has an idea?
Can it be done without loops?

Image Analyst on 25 Jun 2020
Here's one way:
v = rand(1, 1512)' % Create sample data.
m = reshape(v, 3, []) % Make into matrix.
m(:, 2:2:end) = []; % Delete every other column.
v2 = m(:); % Turn into column vector.
hamzah khan on 26 Jun 2020
Thanks a lot for the answer!
How would it work if I have more than one column in my V matrix, like 2 or 3 or more. Rows from 4 till 6 will be removed as it is, but how to bring (1,2) (2,2) and (3,2) below the original rows in m matrix?
like m matrix, instead of having 3 rows should have 6 rows, but the other three should come from the second column of V.

Gaurav Aggarwal on 25 Jun 2020
Edited: Gaurav Aggarwal on 25 Jun 2020
Hi Hamzah,
It is possible. Could you check if this works for you?
%% Starting value of the last chunk to be deleted, simple Arithmetic Progression
an = (4+(X-1)*6);
%% Find all the starting values for the 'to be deleted' chunks i.e. [4 10 16 ... an]
L = 4:6:an;
%% [L L+1 L+2] are all the indices which need to be removed
V([L L+1 L+2], :) = [];
Let me know if this helps you. Thanks.
hamzah khan on 26 Jun 2020
Thanks!