Numerical Python. 대규모 다차원 배열을 다룰 수 있게 도와주는 라이브러리.
왜 필요한가? 데이터의 대부분은 차원이 다른 숫자 배열로 볼 수 있기 때문. 또한 머신러닝에서 대부분의 데이터는 행렬로 표현됨.
import numpy as np
np.array([1, 2, 3, 4, 5])
파이썬 리스트에는 int, float, str이 한 번에 들어갈 수 있다면 numpy에서는 불가능. 즉, 단일타입으로 구성해야한다는 소리. array.astype(자료형 타입)
으로 변경 가능.
np.zeros(반복횟수, dtype = 자료형)
은 array([0,0,반복횟수])
로 반환됨. 이 때 반복횟수에 (튜플)
을 넣게되면 행, 열의 개수로 반환됨.
np.arange(시작, 끝, 등차)
는 시작부터 등차만큼 증가하는 배열을 생성
np.linspace(시작, 끝, 구간)
은 시작부터 끝을 구간만큼의 개수로 균등하게 나눈 값
(튜플)에 따른 shape. 튜플에 해당하는 행, 열의 배열을 만들 수 있음. 튜플의 앞부분은 행의 개수, 뒷부분은 행의 길이
정규분포로 난수를 생성. 평균, 표준편차, (튜플)
시작부터 끝까지 튜플 형태로 출력해주세요
np.array - 배열생성
np.zeros - 0이 들어있는 배열 생성
np.ones - 1이 들어있는 배열 생성
np.empty - 초기화가 없는 값으로 배열을 반환
np.arange(n) - 배열 버전의 range 함수
np.random - 다양한 난수가 들어있는 배열 생성
: 차원
: 모양. 튜플로 반환
몇 개의 데이터가 있는지
x[::2] 는 시작과 끝은 빈채로 2씩 건너뛰어서 값을 뽑아달라는 뜻.
안에 튜플을 새로 넣어서 행과 열의 모양을 다시 바꿈.
np.concatenate([x, y]) 그러면 두 배열이 하나로 합쳐짐. axis = 0 은 아래 방향으로 붙음. axis = 1을 넣으면 가로 방향.
리스트는 어디 인덱스로 나눌 것인지. 지금 인덱스가 3이기 때문에 2 이전의 행렬들은 upper, 아래는 lower로 들어감.
+, -, *, / 는 알아서 연산을 해줌. 이는 행렬간 연산도 가능하다.
shape 다른 array끼리 연산. 모양이 달라도 잡아 늘려서 계산한다고 생각. 서로 shape를 맞춰줌.
집계 : 데이터에 대한 요약 통계
x = np.arange(8).reshape((2,4))
np.sum(x), min,(x) max(x), mean(x) mp.std(x) : 표준편차
np.sum(x, axis = 0) 아래방향으로 값을 더해서 array를 만들어줌
True, False array를 통해서 값들을 뽑아냄.
NUMPY : 파이썬에서 사용되는 과학컴퓨팅용 라이브러리. 비슷한 라이브로는 사이킷, 사이킷런등이 존재. 파이썬에서 기본으로 지원하지 않는 행렬같은 데이터구조 지원 및 수학/과학 계산 함수를 포함하고 있음.
머신러닝에서 대부분의 데이터는 행렬로 표현됨.
파이썬의 리스트의 리스트를 행렬로 표현하는 것과 같음. 리스트의 리스트 라는 것은 리스트 하나가 있고 이 리스트들이 행으로 이루어진 것들.
import numpy as np
A = np.array([[1, 2],[3,4]])
print(A)
"""
[[1 2]
[3 4]]
"""
## 행렬의 스칼라 곱
print(A * 3)
"""
[[3 6]
[9 12]]
"""
## 행렬 덧셈
print(A + A)
"""
[[2 4]
[6 8]]
"""
## 행렬 뺄셈
print(A - A)
"""
[[0 0]
[0 0]]
"""
x = np.array([[1, 2], [3, 4]])
y = np.array([3, 4], [5, 6]])
# 행렬 곱셈
print(np.dot(x, y))
"""
[[ 9 8]
[21 20]]
"""
# 수학적으로는 정의되지 않은 연산
print(x * y)
"""
[[3 8]
[9 8]]
"""
## 같은 차원에서 같다면 True, 다르면 False를 반환
print(a == b)
"""
[True, True, True, False]
"""
print(a > b)
"""
[True, False, False, False]
"""
a = np.array([1, 1, 0, 0], dtype = bool)
b = np.array([1, 0, 1, 0], dtype = bool)
np.logical_or(a, b)
"""
[Trye, True, True, False]
"""
np.logical_and(a, b)
"""
[True, False, False, False]
"""
a = np.array([1, 2, 3, 4, 5])
np.sum(a)
# 15
a.sum()
# 15
a.min()
# 1
a.max()
# 5
## arg... 은 ...값의 인덱스를 반환
a.argmin()
# 0
a.argmax()
# 4
a = np.array([True, True, True])
b = np.array([True, True, False])
np.all(a)
# True
np.all(b)
# False
np.any(a)
# True
np.any(b)
# True
x = np.array([1, 2, 3, 1])
# 평균값
print(np.mean())
# 1.75
# 중앙값
print(np.median(x))
# 1.5
# 표준편차
print(np.std(x))
# 0.82915...
정규화(노말라이즈) 모든 합을 1로 만듦. 하는 이유. 확률을 구할 때 모든지 행렬을 행렬 전체의 값으로 나눠주기 위해서. 행렬 / np.sum(행렬) 이 최종 정규화 방법.
분산 : 값들이 서로 비슷한지, 커져있는지 확인하는 척도.