Vous avez déjà fait de nombreuses observations correctes !
À moins que vous ne souhaitiez ensemencer les deux générateurs aléatoires, il est probablement plus simple à long terme de choisir un générateur ou l'autre. Mais si vous avez besoin d'utiliser les deux, alors oui, vous devrez également les ensemencer tous les deux, car ils génèrent des nombres aléatoires indépendamment l'un de l'autre.
Para numpy.random.seed()
La principale difficulté réside dans le fait qu'il n'est pas "thread-safe", c'est-à-dire qu'il n'est pas sûr d'être utilisé si vous disposez d'un système de gestion de la qualité. plusieurs fils d'exécution différents car son fonctionnement n'est pas garanti si deux threads différents exécutent la fonction en même temps. Si vous n'utilisez pas de threads, et si vous pouvez raisonnablement penser que vous n'aurez pas besoin de réécrire votre programme de cette façon à l'avenir, numpy.random.seed()
devrait aller bien. Si vous avez la moindre raison de penser que vous pourriez avoir besoin de fils à l'avenir, il est beaucoup plus sûr à long terme de faire ce qui est suggéré, et de créer une instance locale de la numpy.random.Random
classe . Pour autant que je puisse dire, random.random.seed()
est thread-safe (ou du moins, je n'ai pas trouvé de preuve du contraire).
El numpy.random
contient quelques distributions de probabilité supplémentaires couramment utilisées dans la recherche scientifique, ainsi que quelques fonctions pratiques pour générer des tableaux de données aléatoires. Le site random.random
est un peu plus légère, et devrait convenir si vous ne faites pas de recherche scientifique ou d'autres types de travaux en statistiques.
Sinon, ils utilisent tous deux le Séquence de torsion de Mersenne pour générer leurs nombres aléatoires, et ils sont tous deux complètement déterministes - c'est-à-dire que si vous connaissez quelques informations clés, il est possible de prédire avec une absolue certitude quel numéro viendra ensuite . Pour cette raison, ni numpy.random, ni random.random ne conviennent pour une utilisations cryptographiques sérieuses . Mais comme la séquence est très très longue, les deux sont parfaits pour générer des nombres aléatoires dans les cas où vous ne craignez pas que des personnes essaient de faire de l'ingénierie inverse sur vos données. C'est également la raison pour laquelle il est nécessaire d'ensemencer la valeur aléatoire : si vous commencez au même endroit à chaque fois, vous obtiendrez toujours la même séquence de nombres aléatoires !
En passant, si vous faire si vous avez besoin d'un caractère aléatoire de niveau cryptographique, vous devez utiliser la fonction secrets ou quelque chose comme Crypto.aléatoire si vous utilisez une version de Python antérieure à Python 3.6.