Borrar filtros
Borrar filtros

how to delete adjacent entries from an array

1 visualización (últimos 30 días)
Stelina
Stelina el 13 de Feb. de 2014
Comentada: Stelina el 20 de Feb. de 2014
Hallo,
I have a long column vector A (say 30000x1) with values 1 to 100 and I want not only to delete all entries equal to the number 60 (which I can do with B= A(A~=60), but all 50 elements immediately next to 60 (previous and next, in total 100). The elements in A are randomly positioned , so some times the deleted values may 'overlap'. Do you know how I can do this?
Thank you

Respuesta aceptada

Jos (10584)
Jos (10584) el 13 de Feb. de 2014
Let N be the number of items that is to be removed before and after the locations of the value V in A. (so there are 2*N+1 items to be removed for non-overlapping regions)
A = [10 9 9 999 9 9 11 12 9 9 999 9 999 9 9 13 14]
V = 999
n = 2
% all elements 999 are to be removed, as well as the adjacent two elements before
% and after it (i.e., the 9's in the example array A above)
tf = logical(conv(double(A==V),ones(1,2*n+1),'same'))
A(tf) = []
  1 comentario
Stelina
Stelina el 20 de Feb. de 2014
Thank you all for the answers. It works (although only if I have single instead of double in the conv command)

Iniciar sesión para comentar.

Más respuestas (1)

Andrei Bobrov
Andrei Bobrov el 13 de Feb. de 2014
Editada: Andrei Bobrov el 13 de Feb. de 2014
ii = unique(bsxfun(@plus,find(A == 60),[-1 0 1]));
out = A;
out(ii(ii > 0 & ii <= numel(A))) = [];
way with Image Processing Toolbox
out = A(imerode(A ~= 60,[1;1;1]));

Categorías

Más información sobre Logical en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by