-
NumPy 한번에 끝내기 01 - 데이터 과학 핵심 도구 (배열 생성)빅데이터/NumPy 2022. 1. 17. 16:35
유투버 '이수안 컴퓨터 연구소'님 강의 참조
01 NumPy
- Numerical Python의 약자로 고성능 과학 계산용 패키지로 강력한 N차원 배열 객체를 가지고 있음
- 정교한 브로드캐스팅이 가능하고 파이썬 자료형 'LIST'와 비슷하지만 더 빠르고 메모리를 효율적으로 관리
- 반복문 없이 데이터 배열에 대한 처리를 지원하며 빠르고 쉽다.
- 데이터 과학 도구에 대한 생태계의 핵심
- Numpy를 사용하려면 import가 필요함
import numpy as np
- 보통 자바, C언어 등 배열/리스트/딕셔너리등을 써봤다면 어떻게 생겼는지 알 것이다. 이들은 보통 1차원 배열인데 'NumPy'는 2차원/3차원 까지도 해결이 가능 하다.
또한 2차원/3차원으로 넘어가면 축이 생기는데 이 축을 잘 생각하여 진행 해야 한다 02 NumPy 배열
a1 = np.array([1,2,3,4,5]) print(a1) [1 2 3 4 5]
- 1차원 배열로써 np.array() 로 시작하며 괄호안에 리스트 형식과 같은 패턴으로 코드를 짠다
print(a1[1], a1[4]) 2 5 a1[1] = 4 a1[4] = 2 print(a1) [1 4 3 4 2]
- 리스트형식 처럼 인덱싱 및 인덱싱을 활용하여 수정이 가능 하다
a2 = np.array([[1,2,3],[4,5,6],[7,8,9]]) print(a2) [[1 2 3] [4 5 6] [7 8 9]]
- 2차원 배열로 리스트 괄호안에 대괄호를 추가하여 작성 한다
print(a2[0,0], a2[1,1], a2[2,2]) 1 5 9 a2[0,0] = 3 a2[1,1] = 8 a2[2,2] = 1 print(a2) [[3 2 3] [4 8 6] [7 8 1]]
- 마찬가지로 인덱싱이 가능하며 수정도 당연히 된다
a3 = np.array([ [ [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] ] ]) print(a3) [[[ 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]]]
- 3차원 배열. 대괄호 개수를 정확히 해줘야 한다.
print(a3[0,0,0], a3[1,1,1], a3[2,2,2]) 1 14 27 a3[0,0,0] = 2 a3[1,1,1] = 5 a3[2,2,2] = 7 print(a3) [[[ 2 2 3] [ 4 5 6] [ 7 8 9]] [[10 11 12] [13 5 15] [16 17 18]] [[19 20 21] [22 23 24] [25 26 7]]]
03 배열 생성 및 초기화
#zeros() : 배열안의 모든 요소를 0으로 초기화 np.zeros(10) array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) #ones() : 배열안의 모든 요소를 1로 초기화 np.ones(5) array([1., 1., 1., 1., 1.]) np.ones((3,3)) array([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.]]) #full() : 모든 요소를 지정한 값으로 초기화 ((차원 및 배열 값), 지정 값) np.full((3,3), 1.23) array([[1.23, 1.23, 1.23], [1.23, 1.23, 1.23], [1.23, 1.23, 1.23]]) #eye() : 단위 행렬(indentity matrix) 생성 (주 대각석의 원소가 모두 1, 나머지는 0인 정사각형 행렬) np.eye(3) array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]) #tri() :삼각형 행렬 생성 (삼각형 부분에 1로 표시) np.tri(3) array([[1., 0., 0.], [1., 1., 0.], [1., 1., 1.]]) #empty() : 초기화 되지 않은 배열 생성. #(초기화가 없어서 배열 생성 시 빠름 / 초기화 되지 않아서 기존 메모리 위치에 존재하는 값이 있음) np.empty(3) array([1., 1., 1.]) #_like() : 지정된 배열의 'shape'과 같은 행렬 생성 #.zeros_like() / .ones_like() / .full_like() / .empty_like() print(a1) np.zeros_like(a1) [1 4 3 4 2] array([0, 0, 0, 0, 0]) print(a2) np.ones_like(a2) [[3 2 3] [4 8 6] [7 8 1]] array([[1, 1, 1], [1, 1, 1], [1, 1, 1]]) #full_like(따라갈 배열 모양, 채울 값) print(a3) np.full_like(a3, 10) [[[ 2 2 3] [ 4 5 6] [ 7 8 9]] [[10 11 12] [13 5 15] [16 17 18]] [[19 20 21] [22 23 24] [25 26 7]]] array([[[10, 10, 10], [10, 10, 10], [10, 10, 10]], [[10, 10, 10], [10, 10, 10], [10, 10, 10]], [[10, 10, 10], [10, 10, 10], [10, 10, 10]]])
04 생성한 값으로 배열 생성
# arange() : 정수 범위로 배열 생성 np.arange(0, 30, 2) #arrange(시작값, 끝값, 증가 폭) array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28]) # linspace() : 범위 내에서 균등 간격의 배열 생성 np.linspace(0, 1, 5) #linspace(시작값, 끝값, 간격) array([0. , 0.25, 0.5 , 0.75, 1. ]) # logspace() : 범위 내에서 균등간격으로 로그 스케일로 배열 생성 np.logspace(0.1, 1, 20) #logspace(시작값, 끝값, 간격) array([ 1.25892541, 1.40400425, 1.565802 , 1.74624535, 1.94748304, 2.1719114 , 2.42220294, 2.70133812, 3.0126409 , 3.35981829, 3.74700446, 4.17881006, 4.66037703, 5.19743987, 5.79639395, 6.46437163, 7.2093272 , 8.04013161, 8.9666781 , 10. ])
05 랜덤값으로 배열 생성
다양한 랜덤값을 만드는 함수들이 있지만 대표적으로 많이 쓰는 함수들을 보자 #.random() : 랜덤한 수의 배열 생성 - 기본적으로 실수 값 반환 np.random.random((3,3)) #.random((원하는 차원 수)) array([[0.17263545, 0.33109652, 0.75507276], [0.49656039, 0.27772408, 0.80011634], [0.03817196, 0.60595324, 0.08992971]]) #.ranint() : 일정 구간의 랜덤 정수의 배열 생성 np.random.randint(0, 10, (3,3)) #.randint(시작값, 끝값, (원하는 차원 수)) array([[7, 0, 4], [6, 1, 8], [1, 2, 9]]) # .normal() : 정규분포(Normal distribution)를 고려한 랜덤한 수의 배열 생성 # 평균 = 0, 표준편차=1, 3*3 배열 np.random.normal(0, 1, size=(3,3)) #.normal(0, 1, (3,3)) array([[-1.08020897, 2.56568459, -0.52557213], [-2.14473104, 0.5190441 , -0.6741116 ], [ 0.45253994, -0.63800886, 2.25517641]]) # .rand() : 균등분포(Uniform distribution)를 고려한 랜덤한 수의 배열 생성 np.random.rand(3,3) array([[0.98630275, 0.60800686, 0.72374373], [0.70780994, 0.17668724, 0.60007655], [0.13051907, 0.08224639, 0.08076543]]) # .randn() : 표준정규분포(Standard normal distribution)를 고려한 랜덤한 수의 배열 생성 np.random.randn(3,3) array([[-0.51564717, 0.62958447, -1.4793792 ], [ 0.5162742 , -0.12866318, 0.5354871 ], [-1.17491695, 0.17182679, -2.30818457]])
06 표준 데이터 타입 (Dtype)
np.zeros(20, dtype=int) array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) np.ones((3,3), dtype=bool) array([[ True, True, True], [ True, True, True], [ True, True, True]]) np.full((3,3), 1.0, dtype=float) array([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.]])
07 날짜/시간 배열 생성
date = np.array('2022-01-17', dtype=np.datetime64) date array('2022-01-17', dtype='datetime64[D]') date + np.arange(12) array(['2022-01-17', '2022-01-18', '2022-01-19', '2022-01-20', '2022-01-21', '2022-01-22', '2022-01-23', '2022-01-24', '2022-01-25', '2022-01-26', '2022-01-27', '2022-01-28'], dtype='datetime64[D]') datetime = np.datetime64('2021-01-22 12:00') datetime numpy.datetime64('2021-01-22T12:00') datetime = np.datetime64('2021-01-22 12:00:12.34', 'ns') datetime numpy.datetime64('2021-01-22T12:00:12.340000000')
'빅데이터 > NumPy' 카테고리의 다른 글
NumPy 한번에 끝내기 04 - 데이터 과학 핵심 도구 (연산 함수/정렬/입출력) (0) 2022.01.18 NumPy 한번에 끝내기 03 - 데이터 과학 핵심 도구 (배열 변환/연산) (0) 2022.01.18 NumPy 한번에 끝내기 02 - 데이터 과학 핵심 도구 (배열 조회/인덱싱/삽입/수정/삭제/복사) (0) 2022.01.18