1. 넘파이(Numpy)
1.1 넘파이란
- 데이터는 행렬로 표현된다.
- 행렬 데이터 빠르게 계산하는 파이썬 패키지
- 행렬 데이터 생성, 수정, 계산 등을 빠르게 처리해주는 패키지
- 특징
- C, C++, 포트란으로 작성
- 선형대수학을 빠르게 연산
- 스칼라, 벡터, 매트릭스
2. 넘파이 실습
2.1 넘파이 불러오기
1
import numpy as np
- import numpy as np로 np라는 약어로 많이 사용됨
2.2 행렬 데이터 생성
1
2
array = np.array([1, 2, 3])
type(array), array
1
(numpy.ndarray, array([1, 2, 3]))
1
2
3
4
5
array2 = np.array(
[[1, 2, 3],
[4, 5, 6]],
)
array2, array2.ndim, array2.shape
1
2
3
4
(array([[1, 2, 3],
[4, 5, 6]]),
2,
(2, 3))
- ndarray : 한가지 데이터 타입만 값으로 사용이 가능
- ndim : 몇 차원인지 확인하는 메서드
- shape : array의 모양을 출력
2.3 행렬의 모양 변경하기 - reshape
1
2
3
4
5
6
print(array2.reshape(3,2))
print()
print(array2.reshape(6))
print()
print(array2.reshape(3,2,1))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[[1 2]
[3 4]
[5 6]]
[1 2 3 4 5 6]
[[[1]
[2]]
[[3]
[4]]
[[5]
[6]]]
- 행렬의 모양을 변경하는 메서드
- 다만, 전체 value값을 넘지못함
2.4 행렬 데이터의 선택 - offset index, masking
1
array2[1], array2[1][2], array2[1][::-1], array2[1][:6]
1
(array([4, 5, 6]), 6, array([6, 5, 4]), array([4, 5, 6]))
1
array2[1,2]
1
6
- 리스트 처럼 offset index와 masking 사용이 가능함
2.5 데이터 수정
1
2
3
ls = [1, 2, 3]
ls[1] = 5
ls
1
[1, 5, 3]
1
2
array2[1][2] = 10
array2
1
2
array([[ 1, 2, 3],
[ 4, 5, 10]])
- masking을 활용하여 해당 부분의 데이터를 수정 가능함
2.6 브로드 캐스팅
1
2
array2[0] = 0
array2
1
2
array([[ 0, 0, 0],
[ 4, 5, 10]])
- array2[0] = 0으로 array2[0]의 3개의 원소가 전부 0으로 변경됨 (브로드캐스팅)
1
2
array2[0] = [7,8,9]
array2
1
2
array([[ 7, 8, 9],
[ 4, 5, 10]])
- 물론 각각 1개씩 원소를 직접 수정도 가능함
2.7 조건으로 선택
1
2
idx = array2 > 7
idx
1
2
array([[False, True, True],
[False, False, True]])
- 조건으로 선택하면 True, False로 반환이 됨
1
array2[idx]
1
array([ 8, 9, 10])
- 조건으로 반환 받은변수를 Masking 하면 True 값만 반환됨
1
2
array2[idx] = 100
array2
1
2
array([[ 7, 100, 100],
[ 4, 5, 100]])
- 위의 내용에서 브로드 캐스팅도 가능함
2.8 행렬 데이터의 생성2
1
2
data = np.zeros((2,3))
data
1
2
array([[0., 0., 0.],
[0., 0., 0.]])
- 영행렬 생성 (np.zeros)
1
data.dtype
1
dtype('float64')
- 기본적으로 생성된 타입은 float64
1
2
data2 = data.astype('int64')
data2.dtype, data2
1
2
3
(dtype('int64'),
array([[0, 0, 0],
[0, 0, 0]]))
- astype을 사용하여 int64로 데이터 타입 변경
1
2
data = np.ones((2, 3, 2))
data
1
2
3
4
5
6
7
array([[[1., 1.],
[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.],
[1., 1.]]])
- np.ones : 모든 값이 1인 행렬을 생성
2.9 arange 생성
1
np.arange(5)
1
array([0, 1, 2, 3, 4])
- 0부터 4까지 배열을 생성
1
np.arange(5, 10)
1
array([5, 6, 7, 8, 9])
- 5부터 0까지 배열을 생성
1
np.arange(5, 10, 2)
1
array([5, 7, 9])
- 5부터 10까지 배열을 만들면서 2씩 건너뜀