일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 백엔드 인턴십
- 프리온보딩
- 컴프리헨션
- API
- 조건연산
- todo project
- numpy
- 집계함수
- Postman
- sqlalchemy
- Comprehension
- 행렬곱
- RDS
- PYTHON
- spring boot
- 클래스
- yaml
- 람다함수
- cerbot
- 코딩테스트
- 파이썬
- Django
- 프로그래머스
- mock server
- self
- 함수
- Jar배포
- EC2
- 파이써닉코드
- 토이프로젝트
- Today
- Total
build my life
[Python] Numpy (1) 본문
Numpy
- 수치 계산을 하기 위한 파이썬 라이브러리
- 벡터와 행렬 단위의 대용량 수치 연산을 빠르게 진행하게 한다!
import numpy as np
numpy 배열 생성
np.array([1,2,3])
lst = [1,2,3]
np.array(lst)
+) 배열 만드는 것에는 여러 방법이 있다.
#range랑 같은 의미
np.arange(10)
# [0,1,2,3,4,5,6,7,8,9]
# n만큼 0으로 채운 배열 생성(n=5)
np.zeros(n)
# [0,0,0,0,0]
# n만큼 1로 채운 배열 생성(n=3)
np.ones(n)
# [1,1,1]
# np.full(shape, n)
# 지정 shape에 n을 채워 배열을 만든다.
np.full((2,3), 5)
# [[5,5,5],[5,5,5]]
배열 크기 확인
- 1차원
arr = np.array([1,2,3,4,5])
arr.shape
# (5,)
- 2차원
arr = np.array([[1,2],[3,4]])
arr.shape
# (2,2)
- 3차원
arr = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
arr.shape
# (2,2,2)
numpy 배열도 슬라이싱/인덱싱 가능!
arr = np.array([[1,2],[3,4]])
arr.shape
# (2,2)
arr[:,1]
#array([2,4])
1차원 배열 슬라이싱은 쉽지만 2차원, 3차원.. 다차원으로 넘어갈 수록 헷갈린다..!!
arr = np.array([
[1,2,3],
[4,5,6],
[7,8,9],
[10,11,12]
])
✅ arr[ : , 0] vs arr[ : , :1]
arr[ : , 0]
# [1 4 7 10]
arr[ : , : 1]
"""
[[ 1]
[ 4]
[ 7]
[10]]
"""
이 둘의 차이가 뭘까...................?
1) : 없이 특정 인덱스값만 들어갔을 경우 0번째 인덱스에 있는 값들을 벡터형식으로 가져오고
2) : 가 있을 경우엔 각 벡터마다 0번째 인덱스를 불러와 2차원 배열 형식 그대로 가져온다.
인덱싱 말고도 배열의 특정 부분을 가져오기 위한 방법이 있다.
마스킹(masking)
- bool 형식으로 데이터의 특정 부분을 선택한다.
arr = np.array([
[1,2,3],
[4,5,6],
[7,8,9],
[10,11,12]
])
mask = [True, False, False, True]
arr[mask]
#[[1,2,3],[10,11,12]]
True에 해당하는 행만 선택해 가져올 수 있다.
조건을 넣을 수도 있다.
mask = arr > 8
arr[mask]
# [9, 10, 11, 12]
모든 요소에 대해 마스킹을 할 경우엔 1차원 배열 형태로 가져옴!!!
여러개의 인덱스 값들을 이용해서 특정 부분을 선택해 가져올 수 있다.
index = [0,2] # 0번째와 2번째 행들만 가져오겠다.
arr[index]
# [[1,2,3],[7,8,9]]
Numpy 함수
배열 연산
- 더하기
np.add(arr1,arr2)
- 빼기
np.subtract(arr1,arr2)
- 곱하기
np.multiply(arr1,arr2)
- 나누기
np.divide(arr1,arr2)
- 절대값
np.abs(arr1-arr2)
벡터 크기 측정 함수(Norm)
#L1 Norm
np.linalg.norm([1,2,3], 1)
# output : 6.0
#L2 Norm
np.linalg.norm([-1,2,3])
# output : 3.7416573867739413
내적(dot product) : 벡터 곱
v1 = np.array([3,2,2])
v2 = np.array([2,1,3])
np.dot(a,b)
# output : 14
=> 내적의 수치가 높을 수록 유사도가 높다라고 측정할 수 있다. 예를 들어 문서의 유사도를 측정한다고 할 때, 내적의 수치 혹은 벡터의 크기(norm)으로 나누어서 유사도를 측정한다.
v1 @ v2 # 표현식
행렬곱
2차원 공간에서 내적, 행렬끼리의 곱!
행렬곱 필수조건) N x M @ M x W = N x W
즉, 앞에 행렬의 열의 개수와 뒤의 행렬의 행의 개수가 동일해야한다!
x = np.array([
[80,90,100],
[85,75,92],
[71,72,85],
[86,89,95]
])
w = np.array([
[0.4],
[0.2],
[0.3]
])
x @ w
# output : [80, 76.6, 68.3, 80.7]
차원 수가 늘어날 수록 머리가 터질 거 가탇....
'Python' 카테고리의 다른 글
[Python] Numpy (3) Random 함수 (0) | 2022.08.30 |
---|---|
[Python] Numpy (2) 집계함수/조건연산 (0) | 2022.08.30 |
[Python] DB 연결 / 테이블 생성 / 데이터 추가 (SQLAlchemy 사용) (4) | 2022.08.24 |
[Python] DB 연결 / 테이블 생성 / 데이터 추가 (pymysql 사용) (0) | 2022.08.23 |
[Python] DB 연결 및 테이블 정보 불러오기 (pymysql 사용) (0) | 2022.08.23 |