
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
a = 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
a = 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
a = 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
a = 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
a = np.arange(1,80,2).reshape(8,5)
np.savetxt("데이터.csv", a, delimiter = ",")
np.savetxt("정수데이터.csv", a, fmt = "%d", delimiter = ",")
|
cs |
저장된 데이터 확인



② 불러오기 : 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 |
