coefficient_matrix = [[2, 2, 1], [2, -1, 2], [1, -1, 2]]
constant_vector = [9, 6, 5]
위와 같이 Matrix와 Vector를 List 형식으로 표현할 수 있을 것이다.
하지만 다음과 같은 문제가 발생한다.
- 다양한 Matrix 계산을 어떻게 만들 것 인가?
- 굉장히 큰 Matrix 를 표현하는 방법
- 처리 속도 문제 - 파이썬은 Interpreter 언어
적절한 패키지를 사용하자
Numpy
- Numerical Python
- 파이썬의 고성능 과학 계산용 패키지
- Matirx와 Vector와 같은 Array 연산의 사실상 파이썬의 표준
Numpy 특징
- 일반 List에 비해 빠르고, 메모리 효율적
- 반복문 없이 데이터 배열에 대한 처리를 지원함
- 선형대수와 관련된 다양한 기능을 제공함
- C, C++, Fortran 등의 언어와 통합 가능
1. Array 생성
- numpy는 np.array 함수를 활용하여 배열을 생성 -> ndarray
- numpy는 하나의 데이터 type만 배열에 넣을 수 있음
- List와 가장 큰 차이점으로 Dynamic typing not supported
- C의 Array를 사용하여 배열을 생성함
import numpy as np
test_array = np.array([1, 4, 5, 8], float) # 데이터 타입 지정
print(test_array)
print(type(test_array[3]))
[1. 4. 5. 8.]
numpy.float64
2. Array Shape
- shape : numpy array의 dimension 구성을 반환함
- dtype : numpy array의 데이터 type을 반환함
- ndim : numer of dimension
- size : data의 개수
import numpy as np
test_array = np.array([1,4,5,"8"], float) #Sring Type의 데이터를 입력해도
print(test_array)
print(type(test_array[3])) # Float Type으로 자동 형변환 실시
print(test_array.dtype) # Array(배열) 전체의 데이터 Type을 반환함
print(test_array.shape) # Array(배열) 의 shape을 반환함
print(np.array(test_array, int).ndim) # numer of dimension
print(np.array(test_array, int).size) # 총 data의 개수
[1. 4. 5. 8.]
<class 'numpy.float64'>
float64
(4,) <- Tuple 타입
1
4
Array 표현 예
2-1. Array reshape & flatten
- Array의 shape의 크기를 변경함 (size는 같지만, dimension이 달라짐)
import numpy as np
test_matrix = [[1,2,3,4], [1,2,5,8]]
print(np.array(test_matrix).shape)
print(np.array(test_matrix).reshape(2,2,2))
print(np.array(test_matrix).reshape(-1,2).shape) # -1 : size를 기반으로 row 개수 선정
print(np.array(test_matrix).flatten()) # 3차원 -> 1차원, 2차원 -> 1차원
(2,4)
[[[1 2],
[3 4]],
[[1 2],
[5 8]]]
(4,2)
[1 2 3 4 1 2 5 8]
3. Indexing
- List와 달리 이차원 배열에서 [0,0] 과 같은 표기법을 제공
- Matrix 일경우 앞은 row, 뒤는 column을 의미함
a = np.array([[1, 2, 3], [4.5, 5, 6]], int)
print(a)
print(a[0,0]) # Two dimensional array representation #1
print(a[0][0]) # Two dimensional array representation #2
a[0,0] = 12 # Matrix 0,0에 12 할당
print(a)
a[0][0] = 5 # Matrix 0,0에 5 할당
print(a)
[[1 2 3]
[4 5 6]]
1
1
[[12 2 3]
[ 4 5 6]]
[[5 2 3]
[4 5 6]]
4. Slicing
- List와 달리 행과 열 부분을 나눠서 slicing이 가능함
- Matrix의 부분 집합을 추출할 때 반복문 없이 할 수 있어 유용함
a = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], int)
a[:,2:] # Row = 전체, Col = 2 이상
a[1,1:3] # Row = 1, Col = 1~2
a[1:3] # Row = 1~2
Creation function, Operation functions, array opeartions, comparsions, Boolean index, fancy index, numpy data i/o
등 나머지는 Numpy - 2 에서 계속
'✍🏻Language & FrameWork > Python' 카테고리의 다른 글
[Python] Class, __init__ (0) | 2024.01.20 |
---|---|
[Python] if __name__ = "__main__": 이란 ? (0) | 2024.01.19 |
[Python for ML] Linear Algebra Codes - 2 (2) | 2024.01.04 |
[Python for ML] News Categorization (0) | 2024.01.02 |
[Python for ML] Linear Algebra Codes - 1 (2) | 2024.01.02 |