Bonjour,
Mon problème est le suivant : j'ai besoin de générer un ensemble de N nombres entiers aléatoires distincts, compris entre deux bornes (1 et high), afin de sélectionner des lignes dans des grands fichiers et comparer les sous-ensembles entre eux.
A priori la fonction numpy.random.randint est faite pour ce type d'opération, mais elle ne permet pas de générer des nombres aléatoires uniques. Sur un ensemble de test d'environ 50 valeurs comprises entre 1 et 250 j'obtiens régulièrement de l'ordre de 2 à 4 répétitions.
J'ai suivi une autre approche lue sur Stackoveflow : générer une séquence d'entiers via "numpy.arange", la trier de manière aléatoire via "numpy.random.shuffle", et la tronquer finalement jusqu'à la taille désirée.
Les valeurs obtenues sont bien distinctes. Cependant en testant les deux méthodes avec un ensemble de 50 valeurs comprises entre 1 et 250, j'observe que les valeurs proches des bornes (2 et 249) semblent régulièrement mieux représentées avec la première méthode que dans la seconde. Au moins une des deux méthode intoduite un déterminisme dans la distribution des données générées. Dans mon cas cela peut introduire un biais, car la qualité des données présentes dans le fichier tend à diminuer au fur et à mesure que l'on avance dans sa lecture.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 a = numpy.arange(1, high+1) numpy.random.shuffle(a) a=a[:size]
Je sais qu'il est difficile de générer de l'aléatoire en informatique, et que j'utilise les deux méthodes de manière naïve, mais auriez-vous une idée d'approche possible pour rendre compte de la différence de distribution entre ces deux méthodes ?
Partager