필터 지우기
필터 지우기

how to delete adjacent entries from an array

조회 수: 1 (최근 30일)
Stelina
Stelina 2014년 2월 13일
댓글: Stelina 2014년 2월 20일
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

채택된 답변

Jos (10584)
Jos (10584) 2014년 2월 13일
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
Stelina
Stelina 2014년 2월 20일
Thank you all for the answers. It works (although only if I have single instead of double in the conv command)

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Andrei Bobrov
Andrei Bobrov 2014년 2월 13일
편집: Andrei Bobrov 2014년 2월 13일
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]));

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by