넘파이는 파이썬의 대표적인 배열 라이브러리입니다.
넘파이는 파이썬의 고차원 배열을 손쉽게 만들고 조작할 수 있는 간편한 도구들을 많이 제공합니다.
우선 넘파이를 설치하는 방법부터 알아보겠습니다.
1
|
pip install numpy
|
cs |
cmd(명령 프롬프트)에 복사한 뒤, 입력하시면 됩니다.
이미 numpy가 있으신 분들은 이런 글이 나옵니다.
만약에 pip install numpy를 해도 넘파이가 정상적으로 설치되지 않는 분들은 밑의 링크를 보시길 바라겠습니다. https://aplab.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-numpy-%EC%84%A4%EC%B9%98
VSCODE에서 import numpy를 했을 때 밑줄이 나오지 않고 저렇게 되면 정상적으로 설치가 된 것입니다.
numpy가 정상적으로 설치되었다고 생각하고 설명을 하겠습니다.
1. array
2. arange
3. shape
4. reshape
5. 배열 인덱싱 / 슬라이싱
6. zeros,ones
7. random
1. array
1
2
3
4
5
6
|
import numpy as np
np_array = np.array([1,2,3,4,5])
a = list[1,2,3,4,5]
print(np_array,a)
print(np_array * 2)
|
cs |
리스트가 있는데 굳이 왜 넘파이의 array 함수를 사용하지?라고 생각하시는 분들을 위해서 비교하는 코드를 준비해 왔습니다.
첫째 줄은 넘파이의 array함수와 리스트를 출력한 것입니다.
둘째 줄에서는 넘파이 array의 함수의 장점인 계산을 활용해서 array의 함수에 *2를 한 것입니다.
넘파이는 머신러닝, 딥러닝을 공부하기 위해서는 꼭 알아야 하는 모듈입니다.
모델에 학습시키기 위해서는 데이터를 적절하게 가공해야 하는데 리스트는 불편한 반면 넘파이는 숫자만 처리하기 때문에 편하다는 장점이 있습니다.
2. arange
1
2
3
4
|
import numpy as np
np_arange = np.arange(25)
print(np_arange)
|
cs |
두 번째는 arange입니다.
arange는 0부터 매개변수에서 1을 뺀 수까지 array형태로 만들어주는 함수입니다.
for 반복문처럼 시작값과 끝값 그리고 간격을 설정해줄 수 있습니다.
1
2
3
4
|
import numpy as np
np_array = np.array([[1,2,3],[3,4,5]])
print(np_array.shape)
|
cs |
shape 함수는 넘파이 배열의 형태를 알려주는 함수입니다.
현재 np_array 배열에는 2행 3열, 총 6개의 숫자가 있는 것을 볼 수 있습니다.
그러므로 출력값은 (2,3)입니다.
4.reshape
reshape 함수는 이름 그래도 다시 형태를 만들어주는 함수입니다.
위 shape 함수에서 사용했던 np_array 배열을 reshape 함수를 이용해 3행 2열의 형태로 바꿔보겠습니다.
1
2
3
4
5
|
import numpy as np
np_array = np.array([[1,2,3],[3,4,5]])
np_array = np_array.reshape(3,2)
print(np_array)
|
cs |
np_array = np_array.reshape(3,2) 문장을 통해서 np_array의 형태를 3행 2열로 바꿨습니다.
데이터를 가공할 때 원하는 모습으로 바꾸려면 reshape 함수를 알아야 하므로 알아두면 좋은 함수중 하나입니다.
5. 배열 인덱싱 / 슬라이싱
1
2
3
4
5
6
7
|
import numpy as np
np_array = np.array([[1,2,3],[3,4,5]])
ex_list = [[1,2,3],[3,4,5]]
first = np_array[1,1]
second = ex_list[1][1]
print(first,second)
|
cs |
우선 리스트와 넘파이 배열의 차이점에 대해 알아보겠습니다.
넘파이 배열은 [1,1]과 같은 형태로 값을 찾을 수 있는데 리스트는 [1][1]과 같은 형태로 값을 찾아야 합니다.
또한 넘파이 배열은 논리적인 인덱싱이 가능합니다.
1
2
|
np_array = np.array([1,2,3,4,5,6])
first = np_array[np_array>2]
|
cs |
이렇게 하면 first에 np_array배열 중 2보다 큰 값들이 저장됩니다.
1
2
3
|
np_array = np.array([1,2,3,4,5,6])
first = np_array[1:3]
print(first)
|
cs |
또한 넘파이 배열은 :(콜론) 연산자를 사용해서 원하는 부분의 값들을 슬라이싱 할 수 있습니다.
[1:3]을 하면 1,2번째 숫자를 추출할 수 있습니다.
6. ZEROS, ONES
zeros, ones는 이름에서 유추할 수 있듯이 모든 원소가 0,1인 행렬을 만들어 주는 함수입니다.
1
2
|
zero = np.zeros((2,5))
print(zero)
|
cs |
이렇게 하면 2행 5열의 형태로 0인 행렬이 만들어집니다.
1
2
|
one = np.ones((2,5))
print(one)
|
cs |
ones 함수를 사용하면 2행 5열의 형태로 1인 행렬이 만들어집니다.
7. random
numpy 에는 random을 사용하는 정말 많은 함수가 있습니다.
대표적으로 rand, randint , normal 3가지만 설명하겠습니다.
1. rand
rand 함수는 0과 1 사이에 무작위 값을 균일한 확률 분포로 생성하는 함수입니다.
1
2
|
rand = np.random.rand(3)
print(rand)
|
cs |
rand는 0과 1 사이의 무작위 값이 3개 담긴 넘파이 배열입니다.
2. randint
randint는 특정한 값 사이 무작위 값을 생성하는 것으로 rand와 비슷한데 int가 있으므로 정수형으로 값을 생성한다.
1
|
randint = np.random.randint(1,10,3)
|
cs |
위의 코드는 1부터 10 사이의 무작위 값 3개를 만드는 코드다. 뒤에 3을 쓰지 않으면 기본값이 1이므로 1개 만든다.
3. normal
normal 함수는 정규 분포로 값을 생성합니다.
이때 평균과 표준 편차를 정해줄 수 있습니다.
1
|
normal = np.random.normal(10,5,5)
|
cs |
이렇게 하면 평균이 10이고 표준편차가 5인 숫자 5개를 생성하는 것입니다.
숫자를 5개만 생성하면 이 숫자들이 정규분포로 생성한 게 맞나.. 싶지만 1000개 정도 생성한 다음 그래프로 만들면 정규분포로 생성되었구나를 알 수 있습니다.