I have this problem

I have a column vector
k =[ 0 0 0 0 0 0 2 5 6 8 7 2 1 0 0 0 0 3 5 4 1 8 6 8 ];
I want to keep the shape of the vector while replacing every 1st and 3rd non zero element with 100 so I end up with
k = [ 0 0 0 0 0 0 100 5 6 8 100 100 1 2 5 100 0 100 5 4 1 100 6 8];

2 Comments

How are you counting? I can't reproduce your vector by any way I can think of
% 1 2 3 1 2 3 1 1 2 3 1 2 3 1
% 1 2 3 1 2 3 1 2 3 1 2 3 1 2
% (1 2 3 1 2 3)1 2 3 1 2 3 1(2 3 1 2)3 1 2 3 1 2 3
k=[ 0 0 0 0 0 0 2 5 6 8 7 2 1 0 0 0 0 3 5 4 1 8 6 8 ];
% x x x x x x x x x x
% x x x x x x x x x
% x x x x x x x x x x
None of these patterns result in your second vector. Also, there seem to be some extra values. Please explain what your pattern is, then we can try to help you find a way to implement it.
Ev
Ev on 19 Sep 2018
Edited: Rik on 19 Sep 2018
% 1 2 3 1 2 3 1 1 2 3 1 2 3 1
k = [ 0 0 0 0 0 0 2 5 6 8 7 2 1 0 0 0 0 3 5 4 1 8 6 8 ];
% Counting only the non-zero elements
original vector. I want

Sign in to comment.

 Accepted Answer

Rik
Rik on 19 Sep 2018
Edited: Rik on 19 Sep 2018
The easiest way to do this is with a loop. A second method is less easy to follow, but removes the need for a loop. The final statement shows that the two methods are indeed interchangeable.
% 1 2 3 1 2 3 1 1 2 3 1 2 3 1
k = [ 0 0 0 0 0 0 2 5 6 8 7 2 1 0 0 0 0 3 5 4 1 8 6 8 ];
k2=k;
counter=0;
for n=1:numel(k)
if n>1 && k(n-1)==0
counter=0;%restart for next run
end
counter=counter+1;
if k(n)~=0 && ...
mod(counter,3)~=2 %"not 2" is equivalent to "1 or 3"
k2(n)=100;
end
end
run_start_inds=find([k(1)~=0 diff(k~=0)>0]);
base=ones(size(k));
base(run_start_inds)=base(run_start_inds)-mod(run_start_inds,3)+1;
countlist=cumsum(base);
countlist(k==0)=NaN;
countlist=mod(countlist,3);
k3=k;
k3(countlist==mod(1,3))=100;
k3(countlist==mod(3,3))=100;
isequal(k2,k3)

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Asked:

Ev
on 19 Sep 2018

Edited:

Rik
on 19 Sep 2018

Community Treasure Hunt

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

Start Hunting!