Conditional replacement of a vector of zeros and ones
2 views (last 30 days)
Show older comments
David Schwartzman
on 4 Apr 2019
Edited: Andreas Bernatzky
on 4 Apr 2019
Hi All,
I have an array of zeros from 1:400 and want to randomly assign ones in 10 positions for every 40 zeros in the sequence.
cycles = 40;
count = 0;
state = zeros(1, 400);
for i = 1:cycles
tempstate = state(count:count+cycles)
for j = 1:10
tempstate(randi(numel(tempstate))) =1
end
count = count + 40
The issue I have is that I want wherever I assign a one to have a zero either side.
But still maintain 10 1's per 40 positions in the sequence.
Appreciate the help.
Thanks,
David
0 Comments
Accepted Answer
Andreas Bernatzky
on 4 Apr 2019
Edited: Andreas Bernatzky
on 4 Apr 2019
Hey David,
this should do the Job. Sorry for my Variablenaming but I could not consider better names :)
sequence=40;
vectors2create=400/sequence;
amountofOnes=10;
finalVector=[];%end vector
for(a=1:1:vectors2create)
tempVec=zeros(1,40);
for(b=1:1:amountofOnes)
onePos(b)=randi(sequence,1);%determine the positions which become 1
end
tempVec(onePos)=1;%set the positions to 1
finalVector=[finalVector,tempVec];%append the final vector
end
4 Comments
Andreas Bernatzky
on 4 Apr 2019
Edited: Andreas Bernatzky
on 4 Apr 2019
Should do the work now.
sequence=40;
vectors2create=400/sequence;
amountofOnes=10;
finalVector=[];%end vector
for(a=1:1:vectors2create)
tempVec=zeros(1,40);
onePos=[];
while(length(onePos)<amountofOnes)
tempPos=randi(sequence,1);%determine the positions which become 1
cAP=tempPos-1;%checkAscendingPos
cDP=tempPos+1;%checkDescendingPos
cOP=tempPos;%checkOwnPos
%if non of this position(or neighbouring) does appear in onePos this Position can be accepted
if(isempty(find(cAP==onePos))==1&&isempty(find(cDP==onePos))==1&&isempty(find(cOP==onePos))==1)
onePos(end+1)=tempPos;
end
end
tempVec(onePos)=1;%set the positions to 1
finalVector=[finalVector,tempVec];%append the final vector
end
More Answers (0)
See Also
Categories
Find more on Matrix Indexing 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!