Borrar filtros
Borrar filtros

delete certain elements in a matrix

1 visualización (últimos 30 días)
dav
dav el 14 de Mzo. de 2013
Is there any way to delete certain rows(with a pattern) in a matrix
like to delete rows 1,6,11,21,26,..... using a loop
Thanks.

Respuesta aceptada

Azzi Abdelmalek
Azzi Abdelmalek el 14 de Mzo. de 2013
Editada: Azzi Abdelmalek el 14 de Mzo. de 2013
A=rand(40,4)
v=[1 6 11 21 26]
w=sort(v);
for k=0:numel(v)-1
A(w(k+1)-k,:)=[]
end
  7 comentarios
Jan
Jan el 14 de Mzo. de 2013
@dav: Simply set a breakpoint in the code an let it run. In the first iteration the first row is deleted. In the 2nd iteration, you should not delete the 6th row, because in the first iteration the 6th row became the 5th one. Therefore (k-1) is subtracted from the index in the k.th iteration.
Nevertheless, a loop is an inefficient approach and suffers from the old Schlemiel the painter problem.
dav
dav el 14 de Mzo. de 2013
Thanks a lot

Iniciar sesión para comentar.

Más respuestas (2)

Sven
Sven el 14 de Mzo. de 2013
Editada: Sven el 14 de Mzo. de 2013
In a loop? Not really.
All at once? Absolutely.
DATA = rand(50,5);
rowsToDelete = [1,6,11,21,26];
DATA(rowsToDelete,:) = [];
If you mean that your rows to delete has the pattern of rows 1,6,11,16, etc, then just do this:
numRows = size(DATA,1);
rowsToDelete = [1:10:numRows 6:10:numRows];
DATA(rowsToDelete,:) = [];
  3 comentarios
Jan
Jan el 14 de Mzo. de 2013
This is much faster than a loop for large arrays. Shrinking arrays in a loop has the same drawback as letting them grow: In each iteration the new array must be allocated and the contents of the old one is copied. This is very expensive.
dav
dav el 14 de Mzo. de 2013
Thanks a lot

Iniciar sesión para comentar.


Jan
Jan el 14 de Mzo. de 2013
Alternative to Sven's approach:
Data = rand(50,5);
index = false(1, 50);
index(1:10:end) = true;
index(6:10:end) = true;
Data(index, :) = [];

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Aún no se han introducido etiquetas.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by