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 commentaires

Rik
Rik le 19 Sep 2018
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 le 19 Sep 2018
Modifié(e) : Rik le 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

Connectez-vous pour commenter.

 Réponse acceptée

Rik
Rik le 19 Sep 2018
Modifié(e) : Rik le 19 Sep 2018

1 vote

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)

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange

Question posée :

Ev
le 19 Sep 2018

Modifié(e) :

Rik
le 19 Sep 2018

Community Treasure Hunt

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

Start Hunting!

Translated by