Removing zeros from a binary array if length of zeros is lesser than a value
Show older comments
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!
Accepted Answer
More Answers (1)
Raymond MacNeil
on 19 Feb 2020
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 Comment
Raymond MacNeil
on 19 Feb 2020
Edited: Raymond MacNeil
on 19 Feb 2020
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.
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!