Você já fez muitas observações corretas!
A menos que você queira semear os dois geradores aleatórios, provavelmente é mais simples no longo prazo escolher um ou outro. Mas se você precisar usar ambos, então sim, você também precisará semear os dois, porque eles geram números aleatórios independentemente um do outro.
Pois numpy.random.seed()
, a principal dificuldade é que não é seguro para thread - isto é, não é seguro usar se você tiver muitos threads diferentes de execução , porque não é garantido que funcione se duas threads diferentes estiverem executando a função ao mesmo tempo. Se você não estiver usando threads, e se puder razoavelmente esperar que não precise reescrever seu programa dessa maneira no futuro, tudo numpy.random.seed()
bem. Se houver alguma razão para suspeitar que você possa precisar de threads no futuro, é muito mais seguro a longo prazo fazer conforme sugerido e criar uma instância local da numpy.random.Random
classe . Pelo que eu posso dizer, random.random.seed()
é thread-safe (ou pelo menos, não encontrei nenhuma evidência do contrário).
A numpy.random
biblioteca contém algumas distribuições de probabilidade extras comumente usadas em pesquisas científicas, bem como algumas funções de conveniência para gerar matrizes de dados aleatórios. A random.random
biblioteca é um pouco mais leve e deve funcionar se você não estiver fazendo pesquisas científicas ou outros tipos de trabalho em estatística.
Caso contrário, ambos usam a sequência de torção de Mersenne para gerar seus números aleatórios e são completamente determinísticos - ou seja, se você souber algumas informações importantes, é possível prever com certeza absoluta qual número virá a seguir . Por esse motivo, nem numpy.random nem random.random é adequado para qualquer uso criptográfico sério . Mas, como a sequência é muito longa, ambos são adequados para gerar números aleatórios nos casos em que você não está preocupado com as pessoas tentando fazer a engenharia reversa de seus dados. Esta também é a razão para a necessidade de semear o valor aleatório - se você começar no mesmo lugar todas as vezes, sempre obterá a mesma sequência de números aleatórios!
Como uma nota lateral, se você não precisa aleatoriedade nível de criptografia, você deve usar a segredos módulo, ou algo parecido Crypto.Random se você estiver usando uma versão do Python mais cedo do que Python 3.6.
random.random
sozinho. Você geralmente não precisa disso, no entanto.