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 <= b
의 randrange(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
'programing' 카테고리의 다른 글
.success()와 .complete()의 차이는 무엇입니까? (0) | 2023.09.02 |
---|---|
이 오류가 계속 발생합니다. XML 구문 분석 오류: 구문 오류이지만 웹 사이트는 여전히 정상적으로 실행됩니다. (0) | 2023.09.02 |
c# mysql 데이터 올바른 구문을 위해 mariadb 서버 버전을 추가합니다. 사용 위치: (0) | 2023.09.02 |
번들 UIT 테스트가 손상되었거나 필요한 리소스가 누락되어 로드할 수 없습니다.번들 재설치 시도 (0) | 2023.09.02 |
요소 집합의 최대 높이를 가진 요소 (0) | 2023.09.02 |