나는 random
다른 파일 에서 모듈의 함수를 사용하는 다소 큰 프로그램을 가지고 있습니다. 프로그램이 항상 동일한 결과를 반환하도록 한 곳에서 임의의 시드를 한 번 설정할 수 있기를 바랍니다. 그것도 얻을 수 있습니까 python
?
나는 random
다른 파일 에서 모듈의 함수를 사용하는 다소 큰 프로그램을 가지고 있습니다. 프로그램이 항상 동일한 결과를 반환하도록 한 곳에서 임의의 시드를 한 번 설정할 수 있기를 바랍니다. 그것도 얻을 수 있습니까 python
?
답변:
실행의 주요 파이썬 모듈해야 import random
및 전화 random.seed(n)
-이 다른 모든 수입간에 공유되는 random
씨앗을 다시 설정하지 않는만큼 다른 곳.
random
모듈 수준 코드에서 메서드를 호출하는 경우 main에서 가져 오는 메서드는 in main에 도달하기 전에 random.seed(n)
해당 호출이 시드 이전에 이루어 지므로 시간이 시드되고 효과적으로 재현 불가능하게됩니다. 무작위.
random.Random()
생성자 를 통해 독립 상태로 추가 난수 생성기를 생성하고 엄격한 재현성이 중요한 경우이를 사용할 수 있습니다.
zss 의 의견은 실제 답변으로 강조 표시되어야합니다.
사람들이주의해야 할 또 다른 사항 :
numpy.random
를 사용numpy.random.seed()
하는 경우를 사용 하여 시드를 설정 해야합니다 . 를 사용random.seed()
하면에서 생성 된 난수에 대한 시드가 설정되지 않습니다numpy.random
. 이것은 잠시 나를 혼란스럽게했다. -zss
random module
경우 함수를 말한 random.choices()
다음 다른 지점에서 numpy
난수 생성기 를 더 내려 가면 np.random.normal()
두 모듈에 대한 시드를 설정해야 한다고 가정 해 보겠습니다. 내가 일반적으로하는 일은 내 main.py
같은 random.seed(my_seed)
및 np.random.seed(my_seed)
. 명예는 ZSS합니다
set_random_seed()
세이지에 사용 합니다.
Jon Clements는 내 질문에 거의 대답합니다. 그러나 실제 문제는 아니 었습니다. 내 코드의 임의성의 이유는 numpy.linalg SVD였습니다. 왜냐하면 조건이 나쁜 행렬에 대해 항상 동일한 결과를 생성하지는 않기 때문입니다!
따라서 동일한 문제가 발생하면 코드에서 확인하십시오!
이전 답변을 기반으로 구축 : 모든 시드가 제어되는 경우에도 많은 구성이 실행 경로를 다양화할 수 있다는 점에 유의하십시오.
나는 " 내 시드를 항상 동일하게 설정하고 변경 / 외부 종속성이 없으므로 내 코드의 실행 경로가 항상 동일해야합니다. "라고 생각했지만 그것은 틀 렸습니다.
나를 물은 예 list(set(...))
는 결과 순서가 다를 수 있습니다.
자신의 난수 생성기를 사용하면이를 매우 쉽게 보장 할 수 있습니다.
세 개의 큰 소수 (암호화 응용 프로그램이 아니라고 가정)를 선택하고 a, b 및 c에 연결하십시오. a = ((a * b) % c) 이것은 매우 임의의 데이터를 생성하는 피드백 시스템을 제공합니다. 모든 소수가 똑같이 잘 작동하는 것은 아니지만 시뮬레이션을 수행하는 경우에는 문제가되지 않습니다. 대부분의 시뮬레이션에 실제로 필요한 것은 패턴 (의사 난수, 기억)이 충분히 복잡한 숫자의 뒤죽박죽입니다. 어떤 식 으로든 귀하의 애플리케이션과 일치하지 않습니다.
Knuth는 이것에 대해 이야기합니다.