2013-04-25 2 views
3

우리는 무작위로 샘플을 생성하는 매우 간단한 프로그램 (단일 스레드)을 사용합니다. 이를 위해 numpy 임의 함수 (예 : normal 또는 random_sample)를 여러 번 호출합니다. 때때로 하나의 임의 호출의 결과로 다른 임의 함수가 호출되는 횟수가 결정됩니다.Python numpy - 난수 재발생

이제 시작 부분에 시드를 설정하고 싶습니다. 내 프로그램을 여러 번 실행해도 동일한 결과가 나타납니다. 이를 위해 numpy 클래스 RandomState의 인스턴스를 사용하고 있습니다. 이것이 처음에는 사실이지만, 결과가 달라지기 때문에 이것이 궁금합니다.

동시성이 없기 때문에 함수를 선형 호출하고 다른 임의의 난수 생성기를 호출하지 않으면 모든 작업을 올바르게 수행 할 때 왜 작동하지 않습니까?

+10

* * * 표시! 문제를 나타내는 최소한의 예가 없으면 우리가 유용 할 가능성이 매우 낮습니다! – Bakuriu

+2

제대로 수행하지 못하고 있습니다. numpy의 PRNG는 좋은 것으로 알려져 있습니다. 우리가 당신을 믿기를 원한다면, PRNG를 뿌리 내린 프로그램을 제공 한 다음 다른 실행 결과를내어 출력하십시오. 그렇지 않으면, 그것은 일어나지 않았다. –

답변

4

오케이, 데이빗이 옳았다. numpy의 PRNG가 올바르게 작동합니다. 내가 만든 모든 최소한의 예를 통해, 그들은 그들이 예상 한대로 일했습니다.

내 문제는 다른 것이었지만 마침내 해결했습니다. 결정적 알고리즘 내에서 사전을 반복하지 마십시오. iterator에 들어가기 위해 .item() 함수를 호출 할 때 Python이 임의로 항목을 정렬하는 것처럼 보입니다.

재현 할 수있는 시뮬레이션을 시도 할 때 고려해야 할 사항을 알려주는 유용한 알림이기 때문에 이것이 실망하지 않았습니다.

-1

재현성이 매우 중요하다면 동일한 시드가 주어진 경우 동일한 출력을 항상 생성하도록 PRNG를 완전히 신뢰할 수 있는지 확신 할 수 없습니다. 임의의 숫자를 하나의 단계에서 캡처하여 재사용 할 수 있도록 저장하는 것이 좋습니다. 그런 다음 두 번째 단계에서 캡처 한 난수를 재생하십시오. 그것은 재현 불가능의 가능성을 제거하는 유일한 방법이며 현재의 문제도 해결합니다.

+1

PRNG가 동일한 시드에 대해 동일한 출력을 생성하지 못하면 PRNG가 손상됩니다. –

+1

맞지만 실제로는 깨질 수 있습니다. 또는 OS간에 일관되게 이식 할 수 없습니다. 또는 파이썬 3에서 다른 결과를 낼 수도 있습니다. 또는 또는 또는. 필자의 요점은 반복성이 중요하다면 기록 및 재생 방식을 통해이를 보장 할 수 있다는 것입니다. –

+1

PRNG는 좋은 것으로 알려져 있으며 이것이 단일 Python 버전 인 단일 시스템 이외의 다른 제안이 아닙니다. –