Conditional replacement of a vector of zeros and ones

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

 Akzeptierte Antwort

Andreas Bernatzky
Andreas Bernatzky am 4 Apr. 2019
Bearbeitet: Andreas Bernatzky am 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 Kommentare

Hi Andreas,
Many thanks for the quick response!
There are still some instances of 1's occuruing together in the sequence, any idea?
Cheers
David
I am not sure if i understand the question correct. But I think you mean something like this is not allowed:
[0 1 1 1 0 0 0 0 1....]
before and after every 1 must be a 0?
Hi Andreas
Exactly right, someitmes I am seeing 0 1 1 0 in finalVector which is not allowed always needs to be 0 1 0
Thanks
David
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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte

Version

R2013b

Community Treasure Hunt

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

Start Hunting!

Translated by