파이썬을 numpy 라이브러리를 이용하여 배열을 섞는 방법에 대해 알아보겠다.
(뭐, 다른 사람이 해놓은 것을 번역한 거라 보면 된다.)
이 방법을 사용한 이유는 머신러닝에서 데이터를 학습시킬 때 편향되지 않은 학습을 시키기 위함이다.
단순히 한 개의 배열을 섞을 때는 아래와 같은 방법을 사용한다.
import numpy as np
x = np.arange(10)
print ("x: ", x)
np.random.shuffle(x)
print ("x: ", x)
출력의 경우 매번 다르겠지만 이런 형태로 나온다.
x: [0 1 2 3 4 5 6 7 8 9]
x: [7 5 8 6 3 1 4 9 0 2]
두 개의 배열을 같은 순서로 섞고 싶다면 어떻게 해야할까?
아래 코드와 같이 그냥 섞으면 결과는 참담하다.
import numpy as np
x = np.arange(10)
print ("x: ", x)
y = np.arange(10)
print ("y: ", y)
np.random.shuffle(x)
print ("x: ", x)
np.random.shuffle(y)
print ("y: ", y)
x: [0 1 2 3 4 5 6 7 8 9]
y: [0 1 2 3 4 5 6 7 8 9]
x: [3 6 4 7 1 8 9 2 5 0]
y: [7 0 2 3 5 4 8 6 1 9]
같은 순서로 섞는 방법은 간단하다.
다른 배열을 하나 만들고 그 배열의 성분을 섞어줄 배열의 인덱스로 채우면 된다. (난해할 수 있다.)
아래 코드를 보자.
import numpy as np
x = np.arange(10)
print ("x: ", x)
y = np.arange(10)
print ("y: ", y)
s = np.arange(x.shape[0])
np.random.shuffle(s)
x = x[s]
print ("x: ", x)
y = y[s]
print ("y: ", y)
s라는 배열에 배열 x의 인덱스를 넣고 섞은 뒤 x, y배열에 대입한다.
결과는 아래와 같다.
x: [0 1 2 3 4 5 6 7 8 9]
y: [0 1 2 3 4 5 6 7 8 9]
x: [7 2 1 9 4 5 0 3 6 8]
y: [7 2 1 9 4 5 0 3 6 8]
참고 문헌
The Plone Expanse, https://play.pixelblaster.ro/blog/2017/01/20/how-to-shuffle-two-arrays-to-the-same-order/
'프로그래밍 > 미분류' 카테고리의 다른 글
네이피어 계산봉 (0) | 2017.04.17 |
---|---|
시스템 복원, 복구지점 생성 (0) | 2016.12.12 |
환경 변수 (0) | 2016.12.09 |
통합개발환경 (IDE, Integrated Development Environment) (Visual Studio/Dev-C++) (0) | 2016.12.02 |