how to create a vector of consecutive numbers that skip over certain elements
Show older comments
I have a vector K whose elements are either 1 or 0 and whose length may change depending on other inputs. I want code that will create a vector R with equal number of elements as K that equals consecutive numbers (1, 2, 3...) except where K=1. Where K=1 I want R to equal 0.
For instance
K might be:
K=[0; 0; 1; 0; 0; 1; 1; 0; 0; 1]
then I would like syntax that creates R as:
R=[1; 2; 0; 3; 4; 0; 0; 5; 6; 0]
Thanks for the help
1 Comment
Meshooo
on 21 Oct 2013
You can do like that
K = [0; 0; 1; 0; 0; 1; 1; 0; 0; 1];
M = ~K;
L = (1:length(K))')
R = (immultiply(L, M))';
Accepted Answer
More Answers (2)
Andrei Bobrov
on 21 Oct 2013
R = cumsum(~K).*~K;
Walter Roberson
on 21 Oct 2013
Edited: Walter Roberson
on 21 Oct 2013
R = (1:length(K)).';
R(K==1) = 0;
Or
R = (1:length(K)).' .* (1-K);
2 Comments
Jacob
on 21 Oct 2013
Walter Roberson
on 21 Oct 2013
n = nnz(K);
R = zeros(size(K,1),1);
R( K ~= 0 ) = 1:n;
Categories
Find more on Simulink in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!