Set logical array values to true if value n values ahead is true

2 views (last 30 days)
I'm curious if anyone can find a smart/clean way (other than a for loop of doing the following). Given a logical array x:
x = logical( [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0] );
For n = 1 I'd like: y = [0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0];
For n = 2 I'd like: y = [0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0];
etc.
  2 Comments
Matt Fig
Matt Fig on 26 Nov 2012
Edited: Matt Fig on 26 Nov 2012
Your examples conflict with your description. Do you want to place n values in the array ahead of a 1 as your examples show, or do you want to place a single 1 ahead of n 1s, as the title implies? If the latter, do you need to place a 1 only in front of exactly n 1s, or at least n 1s?
Chris
Chris on 27 Nov 2012
Sorry, it is indeed the latter. I want to place n values in the array ahead of a 1. Either exactly or at least are fine b/c x will always have "isolated" 1s.

Sign in to comment.

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 26 Nov 2012
x = [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0] > 0;
n = 2;
x(bsxfun(@minus,find(x),(n:-1:1)')) = true;

More Answers (2)

Matt J
Matt J on 26 Nov 2012
n=2;
y=regexprep(char(x+'0'),[repmat('.',1,n),'1'], [repmat('1',1,n),'1'])-'0'

Matt J
Matt J on 26 Nov 2012
y=logical(tril(triu(ones(length(x))),n)*x(:)).'

Categories

Find more on Matrices and Arrays 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!