programing

Python에서 numpy.random과 random.random의 차이

minecode 2023. 9. 2. 09:58
반응형

Python에서 numpy.random과 random.random의 차이

저는 파이썬에서 큰 대본을 가지고 있습니다.저는 다른 사람들의 코드에서 영감을 얻어서 결국 사용하게 되었습니다.numpy.random분포에서 을 위한 모듈과 에서 나는 " " " " " " " " " " " " " " ( " " " " " " 모듈을 합니다." " " " " " " " 를 사용합니다.random.random.

누가 저에게 그 둘 사이의 주요 차이점을 말해줄 수 있나요?두 사람의 각각의 문서 웹페이지를 보니, 제가 보기에numpy.random더 많은 방법이 있을 뿐이지만, 난수의 생성이 어떻게 다른지는 잘 모르겠습니다.

제가 질문하는 이유는 디버깅 목적으로 제 메인 프로그램을 시드해야 하기 때문입니다.하지만 제가 수입하는 모든 모듈에 동일한 난수 발생기를 사용하지 않으면 작동하지 않는데, 맞나요?

또한, 여기 다른 게시물에서 사용하지 않는 것에 대한 토론을 읽었습니다.numpy.random.seed()하지만 왜 이게 그렇게 나쁜 생각인지 정말 이해할 수가 없었어요.왜 그런지 누가 설명해주시면 정말 감사하겠습니다.

당신은 이미 많은 정확한 관찰을 했습니다!

두 개의 임의 생성기를 모두 시드하지 않는 한, 장기적으로 볼 때 하나 또는 다른 하나의 생성기를 선택하는 것이 더 간단할 수 있습니다.하지만 둘 다 사용해야 할 경우에는 둘 다 시드해야 합니다. 서로 독립적으로 난수를 생성하기 때문입니다.

위해서numpy.random.seed()가장 큰 어려움은 스레드 세이프가 아니라는 것입니다. 즉, 실행 스레드가 여러 개인 경우 사용하는 것이 안전하지 않습니다. 두 개의 다른 스레드가 동시에 기능을 실행하는 경우에는 작동이 보장되지 않기 때문입니다.스레드를 사용하지 않고 앞으로 프로그램을 이런 식으로 다시 작성할 필요가 없다고 합리적으로 예상할 수 있다면,numpy.random.seed()괜찮을 겁니다.앞으로 스레드가 필요할 수 있다고 의심할 만한 이유가 있다면 제안된 대로 수행하고 해당 클래스의 로컬 인스턴스를 만드는 것이 장기적으로 훨씬 안전합니다.제가 알기로는random.seed()스레드 세이프(또는 적어도 그 반대의 증거는 찾지 못했습니다).

numpy.random라이브러리는 과학 연구에서 일반적으로 사용되는 몇 가지 추가적인 확률 분포뿐만 아니라 무작위 데이터 배열을 생성하기 위한 몇 가지 편리한 함수를 포함합니다.random.random도서관은 조금 더 가볍고, 만약 당신이 과학적인 연구나 통계학의 다른 종류의 일을 하지 않는다면 괜찮을 것입니다.

그렇지 않으면, 둘 다 Mersenne 트위스터 시퀀스를 사용하여 임의의 숫자를 생성하고, 둘 다 완전히 결정론적입니다. 즉, 만약 여러분이 몇 가지 핵심 정보를 안다면, 어떤 숫자가 다음에 올지 절대적으로 확실하게 예측할 수 있습니다.이러한 이유로 numpy.random 또는 random.random은 심각한 암호화 사용에 적합하지 않습니다.그러나 시퀀스가 매우 길기 때문에 데이터를 역설계하려는 사람들이 걱정되지 않는 경우 두 가지 모두 랜덤 숫자를 생성하는 데 문제가 없습니다.이것은 또한 랜덤 값을 시드해야 하는 이유이기도 합니다. 매번 같은 위치에서 시작하면 항상 동일한 난수 시퀀스를 얻을 수 있습니다!

참고로 암호화 수준의 무작위성이 필요한 경우에는 암호화와 같은 비밀 모듈을 사용해야 합니다.Python 3.6 이전 버전의 Python을 사용하는 경우 임의입니다.

데이터 분석을 위한 Python의 모듈numpy.random에서는 Python 을 보완합니다.random다양한 종류의 확률 분포로부터 전체 표본 값 배열을 효율적으로 생성하기 위한 함수를 사용합니다.

Python의 제공 기능은 Python입니다.random모듈은 한 번에 하나의 값만 샘플링합니다.numpy.random매우 큰 샘플을 더 빨리 생성할 수 있습니다. 기능 사용 IPython 매직 기능 %timeit어떤 모듈이 더 빨리 작동하는지 확인할 수 있습니다.

In [1]: from random import normalvariate
In [2]: N = 1000000

In [3]: %timeit samples = [normalvariate(0, 1) for _ in xrange(N)]
1 loop, best of 3: 963 ms per loop

In [4]: %timeit np.random.normal(size=N)
10 loops, best of 3: 38.5 ms per loop

시드의 소스와 사용된 배포 프로파일은 출력에 영향을 미칩니다. 암호화된 무작위성을 찾고 있는 경우 os.urandom()에서 시드를 지정하면 장치 채터(즉, 이더넷 또는 디스크)에서 거의 실제 랜덤 바이트를 얻습니다(즉, BSD에서 /dev/random).

이것은 당신이 씨앗을 주는 것을 피할 것이고 그래서 결정적인 무작위 숫자를 생성할 것입니다.하지만 무작위 호출은 여러분이 분포에 숫자를 맞출 수 있게 해줍니다(저는 과학적 무작위성이라고 부릅니다). 결국 여러분이 원하는 것은 무작위 숫자의 종곡선 분포입니다. numpy가 이것을 가장 잘 전달합니다.

네, 하나의 발전기를 사용하지만 원하는 랜덤을 결정합니다. 즉, 무작위이지만, 확실히 분포 곡선에서, 또는 양자 장치 없이 얻을 수 있는 최대한 랜덤입니다.

그것은 나를 놀라게 했습니다.randint(a, b)방법이 두 가지 모두에 있습니다.numpy.random그리고.random하지만 그들은 상한선에 대해 다른 행동을 합니다.

random.randint(a, b)다음과 같이 임의의 정수 N을 반환합니다.a <= N <= brandrange(a, b+1).정말 그랬어요.b무작위 문서 포함

하지만 당신이 전화를 한다면,numpy.random.randint(a, b)낮음(낮음)에서 높음(단종)으로 돌아갑니다.Numpy 문서

언급URL : https://stackoverflow.com/questions/7029993/differences-between-numpy-random-and-random-random-in-python

반응형