np.random.choice???

최대 1 분 소요

intro

  • np.random.choice를 이용해서, 일정 확률을 이용해서 random하게 sampling할 때가 있습니다.
  • 코드로 표현하면 다음처럼 되겠죠.
for i in range(0, 3):
    a = np.random.choice(['b', 'c'], 10, [0.9, 0.1])
    print(a)
  • 어, 근데 결과가 이상합니다. c가 터무니 없이 많이 나오네요.
['c' 'b' 'c' 'c' 'b' 'c' 'b' 'b' 'c' 'b']
['c' 'b' 'b' 'b' 'b' 'b' 'c' 'b' 'c' 'b']
['c' 'b' 'b' 'c' 'c' 'c' 'b' 'c' 'b' 'c']
numpy.random.choice(a, size=None, replace=True, p=None)
  • 세번째 오는 값은 p가 아니라, replace인 것이죠. 따라서 문제가 발생합니다.
  • 따라서, 다음으로 고치면 잘 됩니다.
for i in range(0, 3):
    a = np.random.choice(['b', 'c'], 10, p=[0.9, 0.1])
    print(a)
['b' 'b' 'c' 'b' 'b' 'b' 'b' 'b' 'b' 'b']
['b' 'b' 'b' 'b' 'b' 'b' 'b' 'b' 'b' 'b']
['b' 'b' 'b' 'b' 'b' 'c' 'b' 'b' 'b' 'b']

wrap-up

  • 사실 아주 사소한 것이기는 합니다만, 이걸 하나 실수하면 좀 큰 문제가 발생히기 쉬워요.
  • 보통 이정도의 함수는 테스트 없이 그냥 집어넣으니까요,
  • 가능하면 argument를 넘길 때, var_name이랑 함께 넘겨주는 편이 훨씬 좋은 것 같습니다.

댓글남기기