카테고리 없음

Numpy 보충학습_데이터 생성함수, 난수기반 배열생성

eun_coco 2022. 9. 4. 16:27

1. 데이터 생성 함수

 

- Numpy 는 주어진 조건으로 데이터를 생성한 후 배열을 만드는 데이터 생성 함수를 제공한다.

 

 

 

 1) linspace()

 

 - start "이상" stop "이하" 범위에서 num 개를 균일한 간격으로 데이터를 생성하고 배열을 만드는 함수이다.

 - 요소 개수를 기준으로 균등 간격의 배열을 생성한다.

 - 형식 : linspace(start, stop, num)

 

1
2
3
4
import numpy as np
 
print(np.linspace(0,1,5))
print(np.linspace(2,3,2))
cs

 

결과

 

 

 

 

 2) logspace()

 

 - 로그 스케일의 linspace

 - 로그 스케일로 지정된 범위에서 num 개수 만큼 균등 간격으로 데이터를 생성한 후 배열을 만든다.

 - 형식 : logspace(a,b,c) ; log^a ~ log^b 사이의 등간격인 c 개의 행벡터를 생성

 - option : endpoint = True / endpoint = False

 : stop(구간 끝점)으로 주어진 값을 포함시킬 것인지 여부를 결정한다. 디폴트는 True이다.

 

1
2
3
import numpy as np
 
print(np.logspace(1,10,20, endpoint = True))
cs

 

결과

 

 

 

시각화하기

 

1
2
3
4
5
6
7
import numpy as np
import matplotlib.pyplot as plt
 
= np.logspace(1,10,20, endpoint = True)
 
plt.plot(a, 'o')
plt.show()
cs

 

결과

 

 

 


2. 난수 기반 배열 생성 (Random numbers, Random Sampling)

 

- numpy.random 모듈을 통해 빠르고 효율적으로 난수 배열을 생성 가능하다.

- 다양한 확률 분포로부터 데이터를 무작위로 생성해서 시뮬레이선(simulation) 한다.

- 전수조사 대신 표본 조사를 해야 하는 경우, 머신러닝 할 때 데이터셋을 훈련용/검증용/테스트용 으로 샘플링하는 경우 사용할 수 있다.

 

 

 

 

 1) random.normal()

 

 - 정규분포의 형상을 갖는다.

 

1
2
3
4
5
6
7
8
9
10
11
import numpy as np
import matplotlib.pyplot as plt
 
print("평균 0 이고 표준편차 1인 2*3 배열, 데이터 개수가 6개인 정규분포")
ran_arr = np.random.normal(0,1,(2,3))
print("배열 출력")
print(ran_arr)
 
print("\n시각화")
plt.hist(ran_arr, bins = 6)
plt.show()
cs

 

결과 예시

 

 

 *c.f.) bins = 가로축 구간의 개수

 

 

 

여기서 데이터의 개수를 10000개로 늘리면 다음과 같이 시각화된다.

 

1
2
3
4
5
6
7
8
import numpy as np
import matplotlib.pyplot as plt
 
print("평균 0 이고 표준편차 1인 2*3 배열, 데이터 개수가 10000개인 정규분포")
ran_arr = np.random.normal(0,1,10000)
 
plt.hist(ran_arr, bins = 100)
plt.show()
cs

 

결과

 

 

 

 2) random.rand()

 

 - 지정된 shape 배열 생성 후 난수로 초기화한다.

 - 0~1 사이 값의 균등 분포(uniform distribution) 가 갖는 값들을 추출한다.

 - 형식 : random.rand(depth, row, column)

 

1
2
3
4
5
6
7
8
9
10
import numpy as np
import matplotlib.pyplot as plt
 
= np.random.rand(2,2,2)
print("배열 출력")
print(a)
 
print("\n시각화\n")
plt.hist(a[1,:], bins = 4#1번째 depth
plt.show()
cs

 

결과 예시

 

 

이 또한 데이터의 개수를 10000개로 늘리면 다음과 같이 시각화된다.

 

1
2
3
4
5
6
7
import numpy as np
import matplotlib.pyplot as plt
 
= np.random.rand(10000)
 
plt.hist(a, bins = 100)
plt.show()
cs

 

결과 예시

 

 

 

 3) random.randn()

 

 - shape 배열 생성 후 난수로 초기화한다.

 - 난수는 표준 정규 분포로, 대체로 1에서 -1 사이의 값들을 추출한다.

 

1
2
3
4
5
6
7
8
9
10
import numpy as np
import matplotlib.pyplot as plt
 
= np.random.randn(2,2,2)
print("배열 출력")
print(a)
 
print("\n시각화\n")
plt.hist(a[1,:], bins = 4)
plt.show()
cs

 

결과 예시

 

 

 

데이터를 10000개로 늘려보면

 

 

 

 

이와 같은 형태가 나온다.

 

 

정규분포 모양을 갖추기 위해서는 데이터의 개수를 많이 올려야 한다. 10000000 개로 올리면

 

 

 

위와 같은 형태로 시각화된다.

 

 

 

 

 4) random.randint

 

 - shape 배열을 만들고 low 부터 high 미만의 범위에서 정수 표본을 추출한다.

 - 균등분포를 따른다.

 - 형식 : random.randint(log, high, size)

 

1
2
3
4
import numpy as np
import matplotlib.pyplot as plt
 
print(np.random.randint(5,10, size = (2,4)))
cs

 

결과 예시

 

 

데이터를 10000개로 늘리면 다음과 같이 시각화된다.

 

 

 

 

 

 

 5) random.random

 

 - 난수 : [0. , 1.]의 균등 분포에서 표본을 추출한다.

 - 형식 : np.random.random((size))

 

1
2
3
import numpy as np
 
np.random.random((2,4))
cs

 

결과 예시

 

 

 

+ 약속된 난수

 

- 무작위 수를 만드는 난수는 특정 시작 숫자로부터 난수처럼 보이는 수열을 만드는 알고리즘의 결과물이다.

- 따라서 시작점을 설정하여 난수 발생을 제어할 수 있다

- np.random.seed() 함수를 사용하여 난수를 예측 가능하도록 만들 수 있다.

 

 

 

 

 


3. Numpy l / 0

 

 1) loadtxt, savetxt

 

 : 테스트 파일을 불러오고 저장하는 방법

 

 

 

  ① 저장하기 : savetxt()

 

 - 형식 : numpy.savetxt({파일이름}, {데이터}, fmt={데이터 형식}, delimiter={데이터 간 구분자})

 - 데이터 형식 디폴트 : '%. 18e' 이기에 지수형식으로 표현된다.

 - 정수 형태로 저장하고 싶으면 fmt = '%d' 를 사용한다.

 

1
2
3
4
5
6
import numpy as np
 
= np.arange(1,80,2).reshape(8,5)
 
np.savetxt("데이터.csv", a, delimiter = ",")
np.savetxt("정수데이터.csv", a, fmt = "%d", delimiter = ",")
cs

 

 

저장된 데이터 확인

 

 

 

데이터.csv

 

정수데이터.csv

 

 

 

 ② 불러오기 : loadtxt()

 

 - 형식 : numpy.loadtxt({파일 이름}, dtype = " " , delimiter = " ")

 - 데이터 타입의 기본 포맷을 dtype = "float", 즉 실수형이다.

 - dtype을 후에 변경하는 함수는 (데이터 이름).astype(데이터 타입) 이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
 
%cat /etc/issue
%pwd
%ls -al
 
data1 = np.loadtxt("정수데이터.csv", delimiter = ",")
print(data1)
print()
 
data2 = np.loadtxt("정수데이터.csv", dtype = "int", delimiter = ",")
print(data2)
cs

 

결과 예시