파이썬 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. 어떻게 해야 -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 답변

    1. random.randint(0, 1) 은 난수로 0 또는 1을 생성하는 함수입니다. a if condition else b 는 조건을 만족하면 a 아니면 b 가 선택되도록 하는 구문입니다. ( c 등의 삼항연산자의 파이썬 표현입니다. ) 종합하면, 생성된 난수가 1이면 if 앞의 값인 1이, 0이라면 ( 많은 컴퓨터언어에서 0False의 의미입니다. ) else 뒤의 값 -1 이 선택됩니다.
    2. numpy randint 와 random randint 는 생성하는 난수의 범위를 지정하는 방식이 다릅니다. np.random.randint(0, 2, size=nsteps)nsteps 크기의 난수의 어레이를 만들어 내고, 그 내용물은 0 <= n < 2 범위의 정수입니다. 즉, 0 또는 1이 난수로 만들어집니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)