Numpy
다차원 배열(데이터)을 다루는 도구
다차원 배열, 행렬의 생성과 연산, 정렬 등 편리한 기능이 있음
numpy import
import numpy as np
numpy 배열 생성
다차원
# 1차원
array_1 = np.array([1,2,3,4])
print(array_1)
# [1 2 3 4]
# 2차원
array_2 = np.array([[1,2,3,4],[11,12,13,14]])
print(array_2)
# [[ 1 2 3 4]
# [11 12 13 14]]
# 3차원
array_3 = np.array([[[1,2,3,4],[11,12,13,14]], [[21,22,23,24],[31,32,33,34]]])
print(array_3)
# [[[ 1 2 3 4]
# [11 12 13 14]]
#
# [[21 22 23 24]
# [31 32 33 34]]]
# 배열 모양보기
print(array_1.shape)
print(array_2.shape)
print(array_3.shape)
# (4,)
# (2, 4)
# (2, 2, 4)
- np.array() : 리스트로 넘파이 배열을 만드는 함수
- 리스트가 중첩된 깊이가 곧 배열의 차원이 됨
- .shape : 배열 형태 보기 (층, 행, 열)
특정배열 생성
# 0 으로 채운 배열 만들기
z1 = np.zeros([4])
print(z1)
# [0. 0. 0. 0.]
# 1 로 채운 배열 만들기
o2 = np.ones([3,4])
print(o2)
# [[1. 1. 1. 1.]
# [1. 1. 1. 1.]
# [1. 1. 1. 1.]]
# 랜덤한 숫자 배열 만들기
r2 = np.random.randn(2,3)
print(r2)
# [[-0.58450478 -0.21677856 -1.60593065]
# [ 0.43379032 -1.19737432 -1.65608937]]
- np.zeros()
- np.ones()
- np.random.randn()
4차원 랜덤 배열 생성
array_4 = np.random.randn(2,2,4,5).round(3)
print(array_4)
[[[[ 0.579 -0.686 1.575 0.563 1.89 ]
[-0.611 -0.134 -0.718 -0.403 -0.258]
[-0.291 0.479 -0.227 -1.925 -1.215]
[-0.168 0.778 0.896 -0.576 1.55 ]]
[[ 0.559 1.781 -0.189 1.082 0.37 ]
[-0.089 -0.114 1.126 0.072 1.216]
[ 0.349 -0.39 1.434 1.646 0.322]
[ 0.513 0.48 -1.32 -0.701 0.539]]]
[[[-0.407 0.662 -0.767 -0.882 -0.258]
[-1.413 0.137 -1.521 -1.009 0.202]
[ 0.259 -0.126 -0.201 -1.259 -1.758]
[-0.681 0.29 -0.508 0.408 -0.437]]
[[ 0.927 1.21 2.003 0.319 0.708]
[ 0.482 -1.161 -1.158 -0.541 1.319]
[ 0.576 0.091 0.79 1.603 0.517]
[-0.825 -1.335 -1.375 1.043 -1.088]]]]
- np.random.randn().round() : 나타낼 소숫점 자리수
배열 Indexing (조회)
print(array_4[1][0][2][4])
# -1.758
print(array_4[1, 0, 2, 4])
# -1.758
배열 Slicing (자르기)
print(array_4[1, 0][1:4:2])
print(array_4[1, 0, 1:4:2])
[[-1.102 -0.265 0.283 -0.074 -0.785]
[-0.78 0.352 -0.264 -0.927 1.367]]
print(array_4[1][0][1:4:2][1][3:])
print(array_4[1, 0, 1:4:2][1, 3:])
[-0.927 1.367]
- [ 시작인덱스 : 끝인덱스 : 간격 ]
- 생략시 시작=0, 끝=길이, 간격=1
- 끝 인덱스는 포함하지 않음.
배열 연산
arr = np.array([[1, 2, 3, 4],[10, 11, 12, 13]])
print(arr)
[[ 1 2 3 4]
[10 11 12 13]]
print(arr + arr)
[[ 2 4 6 8]
[20 22 24 26]]
+-*/ 모두 가능
Broadcasting
print(arr + 20)
[[21 22 23 24]
[30 31 32 33]]
print(arr * 100)
[[ 100 200 300 400]
[1000 1100 1200 1300]]
배열이 맞지 않는 Broadcasting
arr1 = np.array([[0,0,0],[10,10,10],[20,20,20],[30,30,30]])
arr2 = np.array([[0,1,2],[0,1,2],[0,1,2],[0,1,2]])
[[ 0 0 0]
[10 10 10]
[20 20 20]
[30 30 30]]
[[0 1 2]
[0 1 2]
[0 1 2]
[0 1 2]]
print(arr1 + arr2) # (4x3) + (4x3)
[[ 0 1 2]
[10 11 12]
[20 21 22]
[30 31 32]]
print(arr1 + np.array([0,1,2])) # (4x3) + (1x3)
[[ 0 1 2]
[10 11 12]
[20 21 22]
[30 31 32]]
print(np.array([[10], [20], [30], [40]]) + np.array([1, 2, 3])) # (4x1) + (1x3)
[[11 12 13]
[21 22 23]
[31 32 33]
[41 42 43]]
Aggregation (집계)
배열의 모든 원소를 집계하는 연산
# 배열 전체의 덧셈, 평균, 곱셈, 최댓값, 최솟값
print(**arr.sum(), arr.mean(), arr.prod(), arr.max(), arr.min()**)
# (56, 7.0, 411840, 13, 1)
# 배열에서의 최대인 원소의 번호, 최소인 원소의 번호
print(arr.argmax(), arr[1].argmax(), arr.argmin())
# (7, 3, 0)
# 특정 축(차원)으로 덧셈 수행하기
print(arr.sum(axis=0), arr.sum(axis=1))
# [11 13 15 17] [10 46]
# Indexing + Slicing + Aggregation 응용
print(arr[1].min(), arr[1][2:].sum())
# (10, 25)
- axis=0 ⇒ ↔️
- axis=1 ⇒ ↕️
'퀀트' 카테고리의 다른 글
06. Matplotlib / Pandas 에서 plot 생성하기 (0) | 2022.12.01 |
---|---|
05. 시각화를 위한 그래프들 (0) | 2022.12.01 |
04. DataFrame : 생성, 연산, 정렬, 병합, 그룹, 쿼리 (1) | 2022.11.30 |
03. Pandas : Series, DataFrame (1) | 2022.11.30 |
01. 퀀트 개념 / CAGR, MDD, Sharp Ratio / 라이브러리 (0) | 2022.11.30 |