NumPy 기초 - numpy란, 행렬, 데이터선택, 브로드캐스팅(broad casting), 마스킹(masking)
1. NumPy 알아보기
1_ Numpy란?
2_ Numpy 사용하기(import)
2. NumPy 배열
1_ list 데이터로 행렬 데이터를 생성하기
2_ 행렬의 모양 변경하기
3_ 행렬 데이터의 선택 : offset index
4_ 데이터 수정하기
5_ 브로드캐스팅 (broad casting) & 마스킹(masking)
6_ 행렬 데이터의 생성 _ zeros / ones
1.NumPy 알아보기
1_ Numpy란?
Numpy(넘파이)는 행렬 연산에 있어서 다양한 편의를 제공하는 모듈입니다.
단위는 array로 데이터가 저장됩니다.
특징은
- 내부가 속도가 빠른 C로 작성되어있어 연산 속도가 매우 빠릅니다
- 특히 선형대수학을 빠르게 연산할 수 있습니다
2_ Numpy 사용하기(import)
import numpy as np
2. NumPy 배열
1_ list 데이터로 행렬 데이터를 생성하기
np.array() 괄호안에 list 데이터를 넣어 배열을 형성할 수 있습니다.
type()을 넣어 데이터 타입을 확인하면, numpy.ndarray 라는 형식으로 데이터 타입이 출력됩니다.
[예제코드]
arrary = np.array([1, 2, 3])
type(arrary), arrary
[결과]
(numpy.ndarray, array([1, 2, 3]))
list 를 두번 중첩하여 사용함으로 2차원 배열을 만들 수 있습니다.
[예제코드]
arrary2 = np.array(
[[1, 2, 3],
[4, 5, 6]],
)
arrary2, arrary2.ndim, arrary2.shape
[결과]
(array([[1, 2, 3],
[4, 5, 6]]), 2, (2, 3))
2_ 행렬의 모양 변경하기
reshape()를 통해 객체(행렬)의 모양을 변경할 수 있습니다.
실제로 데이터를 변경하는 것은 아니고, 배열 객체의 shape 정보만을 수정합니다.
[예제코드]
arrary2.reshape(3, 2)
[결과]
array([[1, 2],
[3, 4],
[5, 6]])
3_ 행렬 데이터의 선택 : offset index (오프셋 인덱스)
array 배열 역시 index를 가지고 있어 데이터를 선택할 때 마스킹을 사용합니다
2차원 array 인덱스는
- [ , ] 콤마를 기준으로 2개의 인자를 입력한다. (앞은 행, 뒤는 열)
- [ ] [ ] 대괄호를 두개 써서 2개의 인자를 별도로 입력할 수 있습니다. (앞은 행, 뒤는 열)
- [행, 열] 로 데이터 선택하기
[예제코드]
arrary2[1, 2] # arrary2[1][2]
[결과]
6
- [행] [열] 로 데이터 선택하기
[예제코드]
arrary2[1][::-1] #두번째 행을 선택하고, 처음부터 끝까지 가져오되, 역순으로 가져오기
[결과]
array([6, 5, 4])
4_ 데이터 수정하기
이제 데이터를 선택했으니 list 처럼 수정해보겠습니다.
[예제코드]
#2번째 행에서 3번째 데이터를 선택하여 10으로 바꾸어주기
arrary2[1][2] = 10
arrary2
[결과]
array([[ 1, 2, 3],
[ 4, 5, 10]])
5_ 브로드캐스팅 (broad casting) & 마스킹(masking)
하나의 배열or 요소가 어떤 특정 배열에 영향을 미칠때 배열간의 형상을 맞추는 것을 브로드 캐스팅이라고 합니다
[예제코드]
# 첫번째 행의 전부를 0으로 데이터 바꾸기
arrary2[0] = 0
arrary2
[결과]
array([[ 0, 0, 0],
[ 4, 5, 10]])
[예제코드]
# 첫번째 행을 7, 8, 9로 데이터 바꾸기
arrary2[0] = [7, 8, 9]
arrary2
[결과]
array([[ 7, 8, 9],
[ 4, 5, 10]])
** 브로드캐스팅에서 비교연산자를 사용하면 연산이 된 후 true / false 로 리턴됩니다
이후 masking할때 자주 사용됩니다.
[예제코드]
# array2 배열에서 7이상의 요소들만 true 로 반환
#idx변수를 만들어 (= masking을 만듬) true/false로 변환된 데이터를 저장)
idx = arrary2 > 7
idx
[결과]
array([[False, True, True],
[False, False, True]])
[예제코드]
#offset index 값으로 key를 찾는 것 처럼
#만들어진 idx 마스킹을 사용하여 true에 해당하는 값들만 출력할 수 있습니다.
arrary2[idx]
[결과]
array([ 8, 9, 10])
[예제코드]
# true에 해당하는 값들을 100을 넣어 주어 요소를 바꿉니다
arrary2[idx] = 100
arrary2
[결과]
array([[ 7, 100, 100],
[ 4, 5, 100]])
6_ 행렬 데이터의 생성 _ zeros / ones
Numpy는 원하는 shape으로 배열을 설정하고, 각 요소를 특정 값으로 초기화하는
zeros, ones 와 같은 다양한 함수를 제공합니다.
또한, 파라미터로 입력한 배열과 같은 shape의 배열을 만드는 zeros_like, ones_like, full_like 함수도 제공합니다.
이 함수를 이용하여 배열 생성하고 초기화할 수 있습니다.
1) np.zeros 함수
-
zeros(shape, dtype=float, order='C')
-
지정된 shape의 배열을 생성하고, 모든 요소를 0으로 데이터를 만듭니다.
[예제코드]
#2행 3열을 숫자 0으로 채워 배열 만들기
data = np.zeros((2, 3))
data
[결과]
array([[0., 0., 0.],
[0., 0., 0.]])
[예제코드]
# 처음 제로스를 사용하면 데이터 타입이 실수로 나옵니다
data.dtype
[결과]
dtype('float64')
[예제코드]
# 조금 더 깔끔하게 보여주기 위해 정수로 데이터 타입을 바꾸겠습니다
data2 = data.astype("int")
data2.dtype
[결과]
dtype('float64')
2) np.ones 함수
- np.ones(shape, dtype=None, order='C')
- 지정된 shape의 배열을 생성하고, 모든 요소를 1로 넣어줍니다.
[예제코드]
data = np.ones((2,3,3))
data
[결과]
array([[[1., 1.],
[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.],
[1., 1.]]])
3) np.arange 함수
- numpy.arange([start,] stop[, step,], dtype=None)
- 시작점(start)부터 마지막(stop) 미만까지 간격(step)으로 데이터 생성한 후 배열을 만들어줍니다
- 범위내에서 간격을 기준 균등 간격의 배열
- 요소의 객수가 아닌 데이터의 간격을 기준으로 배열 생성
[예제코드]
#한개의 숫자(n) 만 입력하면, 자동으로 0부터 n-1까지 숫자가 출력됩니다
np.arange(5)
[결과]
array([0, 1, 2, 3, 4])
[예제코드]
# 5부터 9까지 숫자를 출력
np.arange(5, 10)
[결과]
array([5, 6, 7, 8, 9])
[예제코드]
#5부터 9까지 2step을 뛰어서
np.arange(5, 10, 2)
[결과]
array([5, 7, 9])
'IT develop > CODING' 카테고리의 다른 글
NumPy 기초 3 - 행렬 데이터의 결합, concatenate 함수 (0) | 2021.03.08 |
---|---|
NumPy 기초 2 - linspace, logspace 함수, NumPy random (0) | 2021.03.07 |
[Jupyter Notebook] space 번거로움을 자동적으로 바꾸어주는 auto pep8 설치 (0) | 2021.03.07 |
[Jupyter Notebook] 설정없이 바로 그래프 그리는 inline backend config (0) | 2021.03.07 |
[Jupyter Notebook] 번거로움을 줄여주는 startup file 만들기 (0) | 2021.03.07 |