파이썬 Random Walks 질문
조회수 278회
#1 , 코드를 파이썬 기본형으로 구현한 경우
import random
position = 0
walk = [position]
steps = 1000
for i in range(steps):
step = 1 if random.randint(0, 1) else -1
position += step
walk.append(position)
plt.plot(walk[:1000])
#2 np.random으로 구현한 경우
nsteps = 30
draws = np.random.randint(0, 2, size=nsteps)
draws.shape
steps = np.where(draws > 0, 1, -1) #np.where(cond, xarr, yarr) -> cond True 이면 xarr , cond False 이면 yarr
walk = steps.cumsum() # cumsum은 배열에서 주어진 축에 따라 누적되는 원소들의 누적 합을 계산하는 함수
이 코드를 공부 중입니다. 여기서
for i in range(steps):
step = 1 if random.randint(0, 1) else -1
position += step
walk.append(position)
.#1 코드에서 randint 0<=x<=1 이면 1을 , 아니면 -1을 출력한다는 내용인데
- 어떻게 해야 -1이 나오는지 궁금합니다.
따로 구분하면서 세는 코드도 안 보이고 그냥 random.randint(0,1) 이면 0과 1사이의 정수 난수니까 0과 1중 하나를 출력할 것인데 0과 -1 말고 출력될 게 있나요..?
2.왜 #1에선 random.randint(0, 1)을 쓰고 # 2에선 random.randint(0, 2)을 쓰나요?
.#1에서 random.randint(0,2)를 써보니 계속 증가하는 그래프가 그려지던데 왜 다른지 궁금합니다.
답변 해주시면 정말 감사하겠습니다!
1 답변
-
random.randint(0, 1)
은 난수로 0 또는 1을 생성하는 함수입니다.a if condition else b
는 조건을 만족하면a
아니면b
가 선택되도록 하는 구문입니다. ( c 등의 삼항연산자의 파이썬 표현입니다. ) 종합하면, 생성된 난수가1
이면if
앞의 값인1
이,0
이라면 ( 많은 컴퓨터언어에서0
은False
의 의미입니다. )else
뒤의 값-1
이 선택됩니다.- numpy randint 와 random randint 는 생성하는 난수의 범위를 지정하는 방식이 다릅니다.
np.random.randint(0, 2, size=nsteps)
는nsteps
크기의 난수의 어레이를 만들어 내고, 그 내용물은0 <= n < 2
범위의 정수입니다. 즉, 0 또는 1이 난수로 만들어집니다.
댓글 입력