Removing zeros from a binary array if length of zeros is lesser than a value
조회 수: 1 (최근 30일)
이전 댓글 표시
Hello,
I have an array:
input = [0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;1;1;0;0;0;0]
I would like to remove only the 0's between the 1's if the stretch of 0's is lesser than 5, between the 1's. So, for this instance, the output would look something like:
output = [0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;1;1;0;0;0;0].
Any help would be appreciated.
Thanks!
댓글 수: 0
채택된 답변
KSSV
2020년 2월 19일
input = [0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;1;1;0;0;0;0] ;
idx = input==1; % get the locations of 1
% split zeros and one's into cell
idr = diff(find([1;diff(idx);1]));
D = mat2cell(input,idr(:),size(input,2));
% get the lengths of each cell
L = cellfun(@length,D) ;
L(2:2:end) = NaN ; % make length of 1's NaN as it is not needed
% get the length of zeros which are less then 4
id = L<4 ;
% remove those zeros
D(id) = [] ;
% convert to matrix
output = cell2mat(D) ;
댓글 수: 5
추가 답변 (1개)
Raymond MacNeil
2020년 2월 19일
k = [0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;1;1;0;0;0;0];
y = regexp(num2str(k)', '(?<=[0]{5,})0*', 'split');
z = strjoin(cellfun(@(x) replace(x, '', ' '), y, 'UniformOutput', false));
out = str2num(z)';
댓글 수: 1
Raymond MacNeil
2020년 2월 19일
편집: Raymond MacNeil
2020년 2월 19일
Could also use regexprep. I realize I added more steps than was necessary. Also, other ways exist that don't require regexp. This just happened to be the first solution that came to mind.
참고 항목
카테고리
Help Center 및 File Exchange에서 Whos에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!