How to delete elements in array efficiently

17 visualizaciones (últimos 30 días)
ste
ste el 25 de Ag. de 2013
Hi all,
I'm writing a simple script in Matlab where I compare adjacent element and delete one of them if there difference between them is one.
for i=1:length(Vector) - 1
if Vector(i+1) - Vector(i) == 1
Vector(i) = [];
end
if i == length(Vector)
break
end
However, I'm getting an error that my indices are out of bound. Is there a simpler way of doing this by utilizing internal functions. I think my problem is that my array is constantly decreasing and the Vector(i+1) - Vector(i) are out of bounds.

Respuesta aceptada

Azzi Abdelmalek
Azzi Abdelmalek el 25 de Ag. de 2013
Vector=[1 2 4 5 66 88 100 101]
id=find([0 diff(Vector)]==1)-1
Vector(id)=[]

Más respuestas (2)

dpb
dpb el 25 de Ag. de 2013
Editada: dpb el 25 de Ag. de 2013
When doing such in loops, start at end and work to beginning -- then the indices of those removed are above where you're headed next.
But, in Matlab use vector operations and supplied functions to do such things...
v([false diff(v)==1])=[];

Azzi Abdelmalek
Azzi Abdelmalek el 25 de Ag. de 2013
You can also do it with while loop
Vector=[1 2 3 4 5 66 88 100 101 14]
i=1;
while i<numel(Vector)
if Vector(i+1) - Vector(i) == 1
Vector(i) = [];
i=i-1;
end
i=i+1
end
Vector
  4 comentarios
Jan
Jan el 25 de Ag. de 2013
Repeated shrinking of an array suffers from the same inefficiency as iterative growing.
dpb
dpb el 26 de Ag. de 2013
Posted simply as pedagogical example for OP, not as recommended solution--see earlier posting.

Iniciar sesión para comentar.

Categorías

Más información sobre Matrices and Arrays en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by