How to delete elements in array efficiently
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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.
0 commentaires
Réponse acceptée
Azzi Abdelmalek
le 25 Août 2013
Vector=[1 2 4 5 66 88 100 101]
id=find([0 diff(Vector)]==1)-1
Vector(id)=[]
0 commentaires
Plus de réponses (2)
dpb
le 25 Août 2013
Modifié(e) : dpb
le 25 Août 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])=[];
0 commentaires
Azzi Abdelmalek
le 25 Août 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
Voir également
Catégories
En savoir plus sur Matrices and Arrays dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!