Conditional replacement of a vector of zeros and ones
    5 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    David Schwartzman
 il 4 Apr 2019
  
    
    
    
    
    Modificato: Andreas Bernatzky
      
 il 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 Commenti
Risposta accettata
  Andreas Bernatzky
      
 il 4 Apr 2019
        
      Modificato: Andreas Bernatzky
      
 il 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 Commenti
  Andreas Bernatzky
      
 il 4 Apr 2019
				
      Modificato: Andreas Bernatzky
      
 il 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
Più risposte (0)
Vedere anche
Categorie
				Scopri di più su Get Started with MATLAB in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

