2017-06-03 4 views
0

Je veux générer des binaires, où la distance moyenne de hachage entre les éléments est d'environ 50%. La deuxième condition est que la distance ne devrait pas tomber au-dessous de ~ 40% ou dépasser ~ 60%. Une autre complication est que les éléments ne sont pas générés en séquence, mais de temps en temps et je ne veux pas faire une boucle sur tous les éléments à vérifier et régénérer, car cela va devenir un processus lent après un certain temps.Générer des binaires aléatoires avec une distance moyenne de 50%?

Existe-t-il un mécanisme ou un algorithme pour y parvenir?

Actuellement, j'utiliser le code suivant:

def rand(size): 
    op = np.random.uniform() 
    return np.random.choice([0,1], size=size, p=[op, 1-op]) 

mais il brise même quand je produis 10 articles F.E. (Hamming dist):

[ [ 0 2510 8209 4305 3896 1619 7231 6356 8103 3265] 
    [2510 0 8131 4347 3940 1697 7219 6334 8037 3305] 
    [8209 8131 0 5858 6449 9312 2100 3317 1030 7196] 
    [4305 4347 5858 0 4661 4088 5598 5311 5764 4590] 
    [3896 3940 6449 4661 0 3485 6093 5650 6385 4251] 
    [1619 1697 9312 4088 3485 0 8034 6739 9152 2716] 
    [7231 7219 2100 5598 6093 8034 0 3831 2238 6510] 
    [6356 6334 3317 5311 5650 6739 3831 0 3405 5933] 
    [8103 8037 1030 5764 6385 9152 2238 3405 0 7112] 
    [3265 3305 7196 4590 4251 2716 6510 5933 7112 0]] 

min: 1030 la distance moyenne: 0,470624%

BTW. Les binaires sont de 10 000 bits.

Répondre

0

Jusqu'à présent, la solution suivante semble se comporter comme à mes attentes.

def rand(size): 
    return [np.random.randint(0,2) for _ in xrange(size)] 

sera mis à jour lorsque je fais des tests plus approfondis, si c'est OK.