Estou esperando outro desenvolvedor terminar um trecho de código que retornará um array np de forma (100,2000) com valores de -1,0 ou 1.
Nesse ínterim, desejo criar aleatoriamente uma matriz com as mesmas características para poder começar meu desenvolvimento e teste. O fato é que eu quero que esse array criado aleatoriamente seja o mesmo todas as vezes, de modo que não teste em um array que fica mudando seu valor cada vez que executo novamente meu processo.
Posso criar meu array assim, mas há uma maneira de criá-lo de forma que seja sempre o mesmo. Posso conservar o objeto e retirá-lo, mas estou me perguntando se há outra maneira.
r = np.random.randint(3, size=(100, 2000)) - 1
numpy.random.seed()
função quando eu não estava prestando atenção. :-) Eu intencionalmente deixei de fora do módulo original. Eu recomendo que as pessoas usem suas próprias instânciasRandomState
e passando esses objetos.numpy.random.seed()
for desencorajado, isso deve ser mencionado na documentação . Aparentemente, outros colaboradores do NumPy não compartilham da opinião de Robert. Sem querer ofender, estou apenas curioso.random.seed
vs. usar umrandom.Random
objeto na biblioteca padrão do Python. Se você usarrandom.seed
ounumpy.random.seed
, estará semeando todas as instâncias aleatórias, tanto em seu código quanto em qualquer código que esteja chamando ou qualquer código que seja executado na mesma sessão que a sua. Se essas coisas dependem de serem realmente aleatórias, você começa a ter problemas. Se você implantar o código que define a semente aleatória, pode introduzir uma vulnerabilidade de segurança.Crie sua própria instância de
numpy.random.RandomState()
com a semente escolhida. Não usenumpy.random.seed()
exceto para contornar bibliotecas inflexíveis que não permitem que você contorne sua própriaRandomState
instância.fonte
numpy.random.seed()
? Eu sei que não é thread-safe, mas é muito conveniente se você não precisa de thread-safe.numpy.random
, não poderá criar fluxos independentes posteriormente. Também é mais fácil escrever bibliotecas com a intenção de controlar streams PRNG. Sempre existem várias maneiras de entrar em sua biblioteca, e cada uma delas deve ter uma maneira de controlar a semente. Passar objetos PRNG é uma maneira mais limpa de fazer isso do que confiarnumpy.random.seed()
. Infelizmente, esta caixa de comentário é muito curta para conter mais exemplos. :-)numpy.random.RandomState()
sem argumentos. Isso irá propagar o estado com valores exclusivos extraídos dos recursos do seu sistema operacional para tais coisas (/dev/urandom
em máquinas UNIX e o equivalente do Windows lá). Senumpy.random.RandomState(1234567890)
não estiver funcionando para você, mostre exatamente o que você digitou e exatamente a mensagem de erro que recebeu.numpy.random.RandomState()
sem argumentos para obter os melhores resultados.Se você estiver usando outras funções que dependem de um estado aleatório, você não pode apenas definir uma semente geral, mas deve criar uma função para gerar sua lista aleatória de número e definir a semente como um parâmetro da função. Isso não perturbará nenhum outro gerador aleatório no código:
fonte
É importante compreender o que é a semente de um gerador aleatório e quando / como está definido no seu código (verifique por exemplo aqui para uma boa explicação do significado matemático da semente).
Para isso, você precisa definir a semente fazendo:
Então, é importante gerar os números aleatórios de random_state e não de np.random. Ou seja, você deve fazer:
ao invés de
que criará uma nova instância de RandomState () e basicamente usará o relógio interno do computador para definir a semente.
fonte
Eu só quero esclarecer algo em relação à resposta de @Robert Kern, caso isso não esteja claro. Mesmo se você usar o,
RandomState
você terá que inicializá-lo toda vez que chamar um método aleatório numpy, como no exemplo de Robert, caso contrário, você obterá os seguintes resultados.fonte