Numpy
- 파이썬의 고성능 과학 계산용 패키지
- Matrix와 Vector 같은 Array 연산의 사실상 표준
> 특징
- 일반 List에 비해 빠르고 메모리 효율적
- 반복문 없이 데이터 배열에 대한 처리를 지원
- 선형대수와 관련된 다양한 기능 제공
- C, C++, 포트란 등 언어와 통합 가능
> 호출
import numpy as np
> 데이터 정의
test_array = np.array([1, 4, 5, 8 ], float)
- np.array(리스트,데이터 타입)
- 하나의 데이터 타입만 넣을 수 있습니다.
- list와 가장 큰 차이점, Dynamic typing not supported ( 다이나믹 타이핑 지원 안함 : 타입 지정 필요함 )
- C의 배열을 사용해 생성
추가 함수들
- shape : numpy array의 object의 dimension 구성을 반환 ( 차원이 늘어날때마다 하나씩 밀림 )
- dtype : numpy array의 데이터 type을 반환
- ndim : number of dimension 차원의 수
- size : data의 개수
shape handling
> reshape : Array의 size만 같다면 다차원으로 자유로이 변형가능
- np.array(test_matrix).reshape(-1, 2)
-1 : size를 기반으로 row 개수 선정
> flatten : 다차원 array를 1차원 array로 변환 ( reshape 써도 되긴함 )
Index & Slice
> indexing
1
2
3
4
5
6
7
8
9
|
a = np.array([[1,2,3],[4.8,5,6]], int) # 4.8은 4가됨.
print(a[0,0]) # 1
print(a[0][0]) # 둘이 같은 출력나옴
a[0,0] = 12 # 매트릭스 0,0에 12할당
a[0,0] = 5 # 매트릭스 0,0에 5할당
|
cs |
- List와 달리 이차원 배열에서 [0,0] 과 같은 표기법을 제공
- Matrix일 경우 앞은 row 뒤는 column을 의미
> slicing
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
a = np.array([[1,2,3,4,5], [6,7,8,9,10]], int)
print(a[:,2:]) # 전체 Row의 2열 이상
'''
[[ 3 4 5]
[ 8 9 10]]
'''
print(a[1,1:3]) # 1 Row의 1열~ 2열
'''
[7 8]
'''
print(a[1:3]) # 1Row ~ 2Row의 전체
'''
[[ 6 7 8 9 10]]
'''
|
cs |
- List와 달리 행과 열 부분을 나눠서 slicing이 가능함
- Matrix의 부분 집합을 추출할 때 유용
create function
> arange : array의 범위를 지정하여, 값의 list를 생성하는 명령어
np.arange(5) : array([0,1,2,3,4])
np.arange(30).reshape(5,6) 이런 방식으로 자주 쓰임
> ones, zeros, empty
- zeros, ones = 0이나 1 가득찬 ndarray 생성
np.zeros(shape, dtype, order)
ex ) np.zeros(shape=(10,), dtype=np.int8) # 10 - zero vector 생성
( ones도 동일히 사용 )
- empty = shape만 주어지고 비어있는 ndarray 생성 ( memory initialization 이 되지 않음 > 쓰레기 값)
> something_like : 기존 ndarray의 shape 크기 만큼 1, 0 또는 empty array를 반환
test_matrix = np.arange(30).reshape(5,6)
np.ones_like(test_matrix)
> identity : 단위 행렬 (i 행렬) 을 생성함
n = number of rows
np.identity(n=3, dtype=np.int8)
> eye : 대각선인 1인 행렬, k값의 시작 index의 변경이 가능
np.eye(N=3, M=5, dtype=np.int8)
'''
array([[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0]], dtype=int8)
'''
> diag : 대각 행렬의 값을 추출
> random sampling : 데이터 분포에 따른 sampling으로 aaray를 생성
np.random.uniform(0, 1, 10).reshape(2, 5) # 균등분포
np.random.normal(0, 1, 10).reshape(2, 5) # 정규분포
axis
- 모든 operation function을 실행할 때, 기준이 되는 dimension
Concatenate : Numpy array를 합치는 함수
Operation
> Numpy는 array간의 기본적인 사칙연산을 지원함 ( array간 shape가 같을때 가능한 연산 )
a + a = 같은 위치끼리 더하기
a - a = 같은 위치끼리 빼기
a * a = 같은 위치끼리 곱하기
> Dot product
dot 함수 사용
a.dot(b) = a·b # 내적(도트곱)
> transpose : 전치 행렬
a.transpose()
a.T
> broadcasting : Shape이 다른 배열 간 연산을 지원하는 기능
matrix - scalar = 매트릭스에 모든 위치에 scalar값 빼줌
matrix * scalar = 매트릭스에 모든 위치에 scalar값곱해줌
**, // , / 도 동일하게 적용됨
matrix - vector = 매트릭스의 모든 행에 vector값 빼줌
나머지도 동일
comparisons
> All & Any
- Array의 데이터 전부(and) 또는 일부(or)가 조건에 만족 여부 반환
a = np.arange(5)
# array ([0,1,2,3,4])
a > 2
# array([ False, False, False, True, True ]), dtype=bool)
np.any(a > 2), np.any(a < 5)
# (True, Flase)
np.all(a > 2), np.all(a < 5)
# (False, True)
> np.where : 특정 조건에 맞는 인덱스값 반환
a = np.arange(10)
np.where(a>5)
# array([6, 7, 8, 9]),) # 인덱스값 반환
> isnan, isfinite
a = np.array([1, np.NaN, np.Inf], float)
np.isnan(a)
# array([ False, True, False] , dtype=bool) # NaN의 경우 True 반환
np.isfinite(a)
# array([ True, False, False] , dtype=bool) # 객체의 각 원소 단위로 NaN 또는 Infinity가 아닐 경우 True를 반환
> argmax & argmin
- 제일 큰 값 & 작은값 인덱스 반환. ( axis를 넣어서 쓸수 있음. )
a = np.array([1,2,4,5,8,78,23,3])
np.argmax(a) # 5
np.argmin(a) # 0
axis를 넣어서 쓸수 있음.
> boolean index
> fancy index
'공부 정리 ( 강의 ) > AI 기초' 카테고리의 다른 글
4.1.1. pandas 1 (0) | 2022.12.29 |
---|---|
3.2. 경사하강법 (0) | 2022.12.29 |
3.1.3. 행렬이란 무엇일까? (0) | 2022.12.29 |
3.1.2. 벡터란 무엇일까? (0) | 2022.12.27 |
부스트코스 인공지능(AI) 기초 다지기 (0) | 2022.11.30 |