Python에서 0에서 9(포함) 사이의 임의의 정수를 생성하려면 어떻게 해야 합니까?
예를 들어, 0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
질문자 :aneuryzm
Python에서 0에서 9(포함) 사이의 임의의 정수를 생성하려면 어떻게 해야 합니까?
예를 들어, 0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
노력하다:
from random import randrange print(randrange(10))
문서: https://docs.python.org/3/library/random.html#random.randrange
import random print(random.randint(0,9))
random.randint(a, b)
<= N <= b가 되도록 임의의 정수 N을 반환합니다.
문서: https://docs.python.org/3.1/library/random.html#random.randint
이 시도:
from random import randrange, uniform # randrange gives you an integral value irand = randrange(0, 10) # uniform gives you a floating-point value frand = uniform(0, 10)
from random import randint x = [randint(0, 9) for p in range(0, 10)]
이것은 0에서 9까지의 범위에서 10개의 의사 난수 정수를 생성합니다.
secrets
모듈은 Python 3.6의 새로운 기능입니다. 이것은 암호화 또는 보안 용도로 random
모듈보다 낫습니다.
포함 범위 0-9의 정수를 무작위로 인쇄하려면:
from secrets import randbelow print(randbelow(10))
자세한 내용은 PEP 506을 참조하십시오.
다음 중 하나를 시도합니다.
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])
import numpy as np X3 = np.random.choice(a=10, size=15 ) print (X3) >>> array([1, 4, 0, 2, 5, 2, 7, 5, 0, 0, 8, 4, 4, 0, 9])
4.> random.randrange
from random import randrange X4 = [randrange(10) for i in range(15)] print (X4) >>> [2, 1, 4, 1, 2, 8, 8, 6, 4, 1, 0, 5, 8, 3, 5]
5.> random.randint
from random import randint X5 = [randint(0, 9) for i in range(0, 15)] print (X5) >>> [6, 2, 6, 9, 5, 3, 2, 3, 3, 4, 4, 7, 4, 9, 6]
속도:
► np.random.uniform 및 np.random.randint 는 np.random.choice, random.randrange, random.randint 보다 훨씬 빠릅니다 (~10배 빠름).
%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 np.random.choice(a=10, size=15 ) >> 21 µs ± 629 ns per loop (mean ± std. dev. of 7 runs, 10000 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.> np.random.choice
a
가 np.arange(n)인 것처럼 반개방 간격[낮음, 높음)에 걸쳐 무작위 샘플을 생성합니다.4.> random.randrange(stop) 범위(start, stop, step)에서 난수를 생성합니다.
5.> random.randint(a, b) 는 a <= N <= b가 되는 임의의 정수 N을 반환합니다.
6.> astype(int) numpy 배열을 int 데이터 유형으로 캐스트합니다.
7.> 사이즈 = (15,)를 선택했습니다. 이것은 길이 = 15의 numpy 배열을 제공합니다.
배열의 크기를 선택합니다(이 예에서는 크기를 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]])
많은 게시물이 하나의 임의의 정수를 얻는 방법을 보여주지만 원래 질문은 임의의 정수 s (복수형)를 생성하는 방법을 묻습니다.
Python에서 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
a <= N <= b
되도록 임의의 정수 N
randint(a, b+1)
random.randrange
별칭random.shuffle
은 시퀀스를 제자리에서 섞습니다.random.choice
는 비어 있지 않은 시퀀스에서 임의의 요소를 반환합니다.random.choices
k
선택 항목을 반환합니다(교체 포함, Python 3.6+).random.sample
k
고유한 선택 항목을 반환합니다 (대체 없이): 2 random
모듈의 예제를 사용하여 Chunking 및 Aliasing에 대한 R. Hettinger의 이야기도 참조하십시오.
다음은 표준 라이브러리와 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가 시연
random.shuffle
통해 이것을 시도하십시오.
>>> import random >>> nums = range(10) >>> random.shuffle(nums) >>> nums [6, 3, 5, 4, 0, 1, 2, 9, 8, 7]
연속 숫자의 randint
randrange
또는 randrange가 가장 좋은 선택일 수 있지만 시퀀스(예: list
choice
을 사용할 수도 있습니다.
>>> import random >>> values = list(range(10)) >>> random.choice(values) 5
choice
은 비연속적인 샘플의 한 항목에 대해서도 작동합니다.
>>> values = [1, 2, 3, 5, 7, 10] >>> random.choice(values) 7
"암호학적으로 강력"해야 하는 경우 python 3.6 이상 secrets.choice
>>> import secrets >>> values = list(range(10)) >>> secrets.choice(values) 2
numpy를 사용하려면 다음을 사용하십시오.
import numpy as np print(np.random.randint(0,10))
>>> import random >>> random.randrange(10) 3 >>> random.randrange(10) 1
10개의 샘플 목록을 얻으려면:
>>> [random.randrange(10) for x in range(10)] [9, 0, 4, 0, 5, 7, 4, 3, 6, 8]
0에서 9 사이의 임의의 정수를 생성합니다.
import numpy X = numpy.random.randint(0, 10, size=10) print(X)
산출:
[4 8 0 4 9 6 9 9 0 7]
표준 라이브러리의 일부인 random
python 모듈이 필요합니다. 코드를 사용...
from random import randint num1= randint(0,9)
이렇게 하면 변수 num1
0
에서 9
포함) 사이의 임의의 숫자로 설정됩니다.
가장 좋은 방법은 import Random 기능을 사용하는 것입니다.
import random print(random.sample(range(10), 10))
또는 라이브러리 가져오기 없이:
n={} for i in range(10): n[i]=i for p in range(10): print(n.popitem()[1])
여기에서 popitems n
에서 임의의 값을 제거하고 반환합니다.
random.sample
은 사용할 수 있는 또 다른 것입니다.
import random n = 1 # specify the no. of numbers num = random.sample(range(10), n) num[0] # is the required number
이것은 수학적 접근 방식에 가깝지만 100% 작동합니다.
random.random()
a
와 b
사이의 숫자를 생성한다고 가정해 보겠습니다. 이를 달성하려면 다음을 수행하십시오.
num = (ba)*random.random() + a;
물론 더 많은 숫자를 생성할 수 있습니다.
random 모듈에 대한 문서 페이지에서:
경고: 이 모듈의 의사 난수 생성기는 보안 목적으로 사용해서는 안 됩니다. 암호학적으로 안전한 의사 난수 생성기가 필요한 경우 os.urandom() 또는 SystemRandom을 사용하십시오.
random.SystemRandom 은 Python 2.4에 도입되었으며 암호학적으로 안전한 것으로 간주됩니다. 작성 당시 최신 버전인 Python 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
는 이해력과 함께 다른 답변에 따라 사용될 수 있습니다. 필요에 따라 믹스 앤 매치하십시오.
ANU의 양자 번호 생성기를 사용하는 quantumrand
를 사용하여 이러한 답변에 추가할 것이라고 생각했습니다. 불행히도 이것은 인터넷 연결이 필요하지만 숫자가 "얼마나 무작위인지"에 관심이 있다면 이것이 유용할 수 있습니다.
https://pypi.org/project/quantumrand/
예시
import quantumrand number = quantumrand.randint(0, 9) print(number)
출력: 4
문서에는 주사위 굴림과 목록 선택기를 포함하여 다양한 예가 있습니다.
Python에서 random 모듈을 가져온 다음 9개의 숫자 중에서 선택하도록 할 수 있습니다. 정말 기본입니다.
import random numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
나중에 사용하려는 경우 컴퓨터에서 선택한 값을 변수에 넣을 수 있지만 그렇지 않은 경우 인쇄 기능은 다음과 같이 작동해야 합니다.
choice = random.choice(numbers) print(choice)
나는 Python 3.6에서 이것으로 더 나은 운을 가졌습니다.
str_Key = "" str_RandomKey = "" for int_I in range(128): str_Key = random.choice('0123456789') str_RandomKey = str_RandomKey + str_Key
'ABCD' 및 'abcd' 또는 '^!~=-><'와 같은 문자를 추가하여 가져올 문자 풀을 변경하고 범위를 변경하여 생성된 문자 수를 변경하십시오.
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
가 1차원 Point
이기 때문에 괄호가 있습니다. getSample
에 대한 단일 호출로 12개의 결과를 생성하는 것이 더 쉬울 것입니다.
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
출처 : http:www.stackoverflow.com/questions/3996904/generate-random-integers-between-0-and-9
파비콘 새로 고침을 강제 실행하려면 어떻게 합니까? (0) | 2022.02.07 |
---|---|
0.1f를 0으로 변경하면 성능이 10배 느려지는 이유는 무엇입니까? (0) | 2022.02.07 |
히스토리가 있는 SVN 리포지토리를 새 Git 리포지토리로 마이그레이션하려면 어떻게 해야 합니까? (0) | 2022.02.07 |
예쁜 Git 분기 그래프 (0) | 2022.02.07 |
유형 검사: typeof, GetType 또는 is? (0) | 2022.02.07 |