답변:
시험:
from random import randrange
print(randrange(10))
추가 정보 : http://docs.python.org/library/random.html#random.randrange
secrets
더 나은 난수를 위해 모듈을 사용하십시오 . 참조 : docs.python.org/3/library/random.html
import random
print(random.randint(0,9))
random.randint(a, b)
a <= N <= b가되도록 난수 N을 반환합니다.
문서 : https://docs.python.org/3.1/library/random.html#random.randint
randint(0,9)
9를 반환하지 않습니다). 이것은 온라인 설명서에는 반영되어 있지 않지만 내장 된 도움말에 있습니다.
배열의 크기를 선택하십시오 (이 예에서는 크기를 20으로 선택했습니다). 그런 다음 다음을 사용하십시오.
import numpy as np
np.random.randint(10, size=(1, 20))
다음 형식의 출력을 볼 수 있습니다 ( 실행할 때마다 다른 임의의 정수가 리턴되므로 출력 배열의 정수가 아래 제공된 예와 다를 수 있음 ).
array([[1, 6, 1, 2, 8, 6, 3, 3, 2, 5, 6, 5, 0, 9, 5, 6, 4, 5, 9, 3]])
이것을 통해보십시오 random.shuffle
>>> import random
>>> nums = range(10)
>>> random.shuffle(nums)
>>> nums
[6, 3, 5, 4, 0, 1, 2, 9, 8, 7]
다음 중 하나를 시도합니다.
import numpy as np
X1 = np.random.randint(low=0, high=10, size=(15,))
print (X1)
>>> array([3, 0, 9, 0, 5, 7, 6, 9, 6, 7, 9, 6, 6, 9, 8])
import numpy as np
X2 = np.random.uniform(low=0, high=10, size=(15,)).astype(int)
print (X2)
>>> array([8, 3, 6, 9, 1, 0, 3, 6, 3, 3, 1, 2, 4, 0, 4])
3.> random.randrange
from random import randrange
X3 = [randrange(10) for i in range(15)]
print (X3)
>>> [2, 1, 4, 1, 2, 8, 8, 6, 4, 1, 0, 5, 8, 3, 5]
4.> random.randint
from random import randint
X4 = [randint(0, 9) for i in range(0, 15)]
print (X4)
>>> [6, 2, 6, 9, 5, 3, 2, 3, 3, 4, 4, 7, 4, 9, 6]
속도:
► np.random.randint 가 가장 빠르며 그 뒤에 np.random.uniform 및 random.randrange 가 옵니다 . random.randint 가 가장 느 립니다.
► np.random.randint 및 np.random.uniform은 random.randrange 및 random.randint보다 훨씬 빠릅니다 (~ 8 ~ 12 배 빠름) .
%timeit np.random.randint(low=0, high=10, size=(15,))
>> 1.64 µs ± 7.83 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit np.random.uniform(low=0, high=10, size=(15,)).astype(int)
>> 2.15 µs ± 38.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit [randrange(10) for i in range(15)]
>> 12.9 µs ± 60.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit [randint(0, 9) for i in range(0, 15)]
>> 20 µs ± 386 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
노트:
1.> np.random.randint 는 반 개방 간격 [낮음, 높음]에 걸쳐 임의의 정수를 생성합니다.
2.> np.random.uniform 은 반 개방 간격 [낮음, 높음]에 걸쳐 균일하게 분포 된 숫자를 생성합니다.
3.> random.randrange (stop) 은 range (start, stop, step)에서 난수를 생성합니다.
4.> random.randint (a, b) 는 a <= N <= b가되도록 임의의 정수 N을 반환합니다.
5.> astype (int) 는 numpy 배열을 int 데이터 형식으로 캐스팅합니다.
6.> size = (15,)를 선택했습니다. 이것은 길이 = 15의 numpy 배열을 제공합니다.
연속 숫자의 경우 randint
또는 randrange
아마도 최선의 선택이지만 시퀀스에 여러 개의 고유 값이있는 경우 (예 : a list
) 다음을 사용할 수도 있습니다 choice
.
>>> import random
>>> values = list(range(10))
>>> random.choice(values)
5
choice
연속적이지 않은 샘플에서 하나의 항목에 대해서도 작동합니다.
>>> values = [1, 2, 3, 5, 7, 10]
>>> random.choice(values)
7
"암호 적으로 강력한"필요한 경우 secrets.choice
Python 3.6 이상이 있습니다.
>>> import secrets
>>> values = list(range(10))
>>> secrets.choice(values)
2
random.sample
. 교체하면와 이해를 사용할 수 있습니다 choice
: 예를 들어 교체로 3 개 임의의 값을 포함하는 목록 :[choice(values) for _ in range(3)]
많은 게시물이 하나의 임의의 정수 를 얻는 방법을 보여 주지만 원래 질문은 임의의 정수 s (복수) 를 생성하는 방법을 묻습니다 .
파이썬에서 0에서 9 사이의 임의의 정수를 어떻게 생성 할 수 있습니까?
명확성을 위해 여기에서 여러 개의 임의 정수를 얻는 방법을 보여줍니다.
주어진
>>> import random
lo = 0
hi = 10
size = 5
암호
여러 개의 임의의 정수
# A
>>> [lo + int(random.random() * (hi - lo)) for _ in range(size)]
[5, 6, 1, 3, 0]
# B
>>> [random.randint(lo, hi) for _ in range(size)]
[9, 7, 0, 7, 3]
# C
>>> [random.randrange(lo, hi) for _ in range(size)]
[8, 3, 6, 8, 7]
# D
>>> lst = list(range(lo, hi))
>>> random.shuffle(lst)
>>> [lst[i] for i in range(size)]
[6, 8, 2, 5, 1]
# E
>>> [random.choice(range(lo, hi)) for _ in range(size)]
[2, 1, 6, 9, 5]
임의의 정수 샘플
# F
>>> random.choices(range(lo, hi), k=size)
[3, 2, 0, 8, 2]
# G
>>> random.sample(range(lo, hi), k=size)
[4, 5, 1, 2, 3]
세부
일부 게시물은 기본적으로 여러 임의의 정수를 생성하는 방법을 보여줍니다 . 1 다음은 묵시적 질문을 해결하는 몇 가지 옵션입니다.
random.random
범위 내에서 임의의 부동 소수점을 반환합니다[0.0, 1.0)
random.randint
임의의 정수를 반환 N
하는 등a <= N <= b
random.randrange
별칭randint(a, b+1)
random.shuffle
순서대로 순서 섞기random.choice
비어 있지 않은 시퀀스에서 임의의 요소를 반환random.choices
반환합니다 k
(Python 3.6 이상).random.sample
반환합니다 k
(교체하지 않음) : 2모듈의 예제를 사용하여 청킹 및 앨리어싱에 대한 R. Hettinger의 이야기 를 참조하십시오 random
.
다음은 표준 라이브러리와 Numpy의 일부 임의 함수를 비교 한 것입니다.
| | random | numpy.random |
|-|-----------------------|----------------------------------|
|A| random() | random() |
|B| randint(low, high) | randint(low, high) |
|C| randrange(low, high) | randint(low, high) |
|D| shuffle(seq) | shuffle(seq) |
|E| choice(seq) | choice(seq) |
|F| choices(seq, k) | choice(seq, size) |
|G| sample(seq, k) | choice(seq, size, replace=False) |
Numpy 의 여러 분포 중 하나 를 임의의 정수 샘플 로 빠르게 변환 할 수도 있습니다 . 삼
예
>>> np.random.normal(loc=5, scale=10, size=size).astype(int)
array([17, 10, 3, 1, 16])
>>> np.random.poisson(lam=1, size=size).astype(int)
array([1, 3, 0, 2, 0])
>>> np.random.lognormal(mean=0.0, sigma=1.0, size=size).astype(int)
array([1, 3, 1, 5, 1])
1 즉, @John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, et al. 2 @prashanth는 하나의 정수를 보여주는이 모듈을 언급합니다. 3 @Siddharth Satpathy 시연
0에서 9 사이의 임의의 정수 생성
import numpy
X = numpy.random.randint(0, 10, size=10)
print(X)
산출:
[4 8 0 4 9 6 9 9 0 7]
이것은 수학적 접근 방식에 가깝지만 100 % 작동합니다.
random.random()
함수를 사용하여 a
및 사이의 숫자를 생성 한다고 가정 해 보겠습니다 b
. 이를 위해서는 다음을 수행하십시오.
num = (b-a)*random.random() + a;
물론 더 많은 숫자를 생성 할 수 있습니다.
랜덤 모듈 의 문서 페이지에서 :
경고 :이 모듈의 의사 랜덤 생성기는 보안 목적으로 사용해서는 안됩니다. 암호로 안전한 의사 난수 생성기가 필요한 경우 os.urandom () 또는 SystemRandom을 사용하십시오.
Python 2.4에서 도입 된 random.SystemRandom 은 암호화 적으로 안전한 것으로 간주됩니다 . 파이썬 3.7.1에서는 여전히 쓸 수 있습니다.
>>> import string
>>> string.digits
'0123456789'
>>> import random
>>> random.SystemRandom().choice(string.digits)
'8'
>>> random.SystemRandom().choice(string.digits)
'1'
>>> random.SystemRandom().choice(string.digits)
'8'
>>> random.SystemRandom().choice(string.digits)
'5'
대신 string.digits
, range
아마도 이해와 함께 다른 몇 가지 답변에 따라 사용할 수 있습니다. 필요에 따라 믹스 앤 매치하십시오.
OpenTURNS는 임의의 정수를 시뮬레이션 할뿐만 아니라 UserDefined
정의 된 클래스 와 연관된 분포를 정의 할 수 있습니다.
다음은 분포의 12 가지 결과를 시뮬레이션합니다.
import openturns as ot
points = [[i] for i in range(10)]
distribution = ot.UserDefined(points) # By default, with equal weights.
for i in range(12):
x = distribution.getRealization()
print(i,x)
인쇄합니다 :
0 [8]
1 [7]
2 [4]
3 [7]
4 [3]
5 [3]
6 [2]
7 [9]
8 [0]
9 [5]
10 [9]
11 [6]
때문에 괄호가 있습니다 x
A는 Point
1 차원에서. 한 번의 호출로 12 개의 결과를 생성하는 것이 더 쉬울 것입니다 getSample
.
sample = distribution.getSample(12)
생산 :
>>> print(sample)
[ v0 ]
0 : [ 3 ]
1 : [ 9 ]
2 : [ 6 ]
3 : [ 3 ]
4 : [ 2 ]
5 : [ 6 ]
6 : [ 9 ]
7 : [ 5 ]
8 : [ 9 ]
9 : [ 5 ]
10 : [ 3 ]
11 : [ 2 ]
이 주제에 대한 자세한 내용은 다음과 같습니다. http://openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html