1. 넘파이(Numpy)란?
▶ 넘파이(Numpy)란 Numerical Python으로 파이썬에서 대규모의 다차원 배열을 다룰 때 쓰는 라이브러리이다. 머신러닝의 이론적 배경은 선형대수와 통계로 이루어져 있다.
▶파이썬에서 행렬과 선형대수를 다룰 때 대표적으로 쓰는 패키지가 넘파이이다. 반복문 없이 배열을 처리하기 때문에 대량의 배열 데이터 연산이 훨씬 더 빠르고 메모리를 효율적으로 사용한다.
▶넘파이는 c, c++기반의 타 프로그램과 데이터를 주고 받고, API를 호출해 쉽게 다루는 기능을 제공해 파이썬이 가지는 성능의 제약을 보완할 수도 있다.
▶ 많은 머신러닝 알고리즘이 넘파이 기반으로 되어 있기 때문에 넘파이를 이해하는 것은 파이썬 기반의 머신러닝을 이해하는 데 중요하다.
2. 모듈 사용하기
import random
# import : 모듈 불러오는 키워드
# random 모듈은 random number(난수)를 구할 수 있는 모듈이다.
▶ 모듈이란 함수나 변수 또는 클래스들을 모아 놓은 파일이다. 파이썬에서는 누군가가 만들어 놓은 모듈을 import 키워드로 불러와 쓸 수 있다.
import random
print(random.randrage(1, 7))
#1이상 7미만의 수 중 임의의 수를 출력한다.
▶ 모듈의 함수나 변수에 접근하려면 .(dot) 연산자를 이용한다.
3. ndarray란?
▶ ndarray는 n-dimensional array 즉 n차원의 배열을 뜻한다. ndarray로 다차원 배열을 쉽게 생성하고 연산할 수 있다. 넘파이의 기본 데이터 타입은 ndarray이다.
import numpy as np #넘파이 모듈 불러와 np 별칭으로 쓰는 게 관례
np_arr = np.array(range(5))
print(np_arr) #[0 1 2 3 4]
print(type(np_arr)) #<class 'numpy.ndarray'>
▶ array() : 리스트와 같은 다양한 인자를 입력받아 ndarray로 변환한다. ndarray는 배열(array)를 지원하지 않고 리스트(list) 객체를 지원한다. 즉 같은 데이터 타입만 저장이 가능하다.
4. ndarray 속성
import numpy as np
np_arr = np.array(range(5), dtype = float)
print(np_arr) #[0. 1. 2. 3. 4.]
print(np_arr.dtype) #float64
▶ dtype : dtype 속성 값으로 데이터 타입을 확인할 수 있고 타입을 바꿀 수도 있다.
import numpy as np
#1차원 배열
arr1= np.array([1,2,3,4,5])
print(arr1.ndim) # 1
print(arr1.shape) #(5,)
#2차원 배열
arr2 = np.array([1,2,3], [4,5,6])
print(arr2.ndim) #2
print(arr2.shape) #(2,3)
▶ ndim : ndarray의 차원과 관련된 객체 속성으로 배열의 차원 수를 알 수 있다.
▶ shape : 배열의 각 차원을 튜플 형태로 표현한다. n행과 m열의 행렬은 (n,m) 형태의 튜플로 표현한다.
데이터 타입 | 데이터 코드 | 설명 |
int | int, i, int_, int32, int64, i32, i64 | 정수형 타입 |
float | f, float_, float32, float64, f32, f64 | 실수형 타입 |
str | str, S, U, U32 | 문자열 타입 |
bool | ?, b, bool_ | 부울 타입(True 또는 False) |
import numpy as np
array = np.arange(10) #[0 1 2 3 4 5 6 7 8 9]
▶ arange() : arange(n)라고 선언하면 0부터 n-1까지의 값이 순차적으로 들어간 ndarray를 만든다. range()와 유사하다.
▶ zeros() : 모두 0으로 초기화된 ndarray를 생성한다.
▶ ones() : 모두 1로 초기화된 ndarray를 생성한다.
5. ndarray의 인덱싱(Indexing)
import numpy as np
array1 = np.arange(10) #[0 2 3 4 5 6 7 8 9]
print(array1[0]) # 0
print(array1[-1]) # 9
array2 = np.arange(1, 13, 1)
array2.shape = 3,4 #[[1 2 3 4]
# [5 6 7 8]
# [9 10 11 12]]
print(array2[2, 3]) #12
▶ 인덱싱 : 데이터를 인덱스를 통해서 값을 찾아낼 수 있다. 데이터의 인덱스는 0부터 시작한다. 인덱스 -1은 맨 뒤의 데이터 값을 의미한다.
6. ndarray의 슬라이싱(Slicing)
#1차원 배열
array1 = np.arange(5)
print(array1) #[0 1 2 3 4]
print(array1[1:3]) #[1 2 3]
print(array1[1:]) #[1 2 3 4]
print(array1[:4]) #[0 1 2 3]
print(array1[::2]) #[0 2 4]
arr2 = np.arange(1, 13, 1)
arr2.shape = 3, 4
print(arr2) #[[1 2 3 4]
# [5 6 7 8]
# [9 10 11 12]]
print(arr2[1:2, :2:3]) #[[5]]
print(arr2[1:,:2]) #[[5 6]
# [9 10]]
▶ 슬라이싱 : 인덱스 값으로 배열의 일부를 가져올 수 있다.
arr = np.arage(6) #[0 1 2 3 4 5]
print(arr < 3) #[True True True False False False]
print(arr[arr < 3]) #[0 1 2]
▶ boolean indexing : 배열의 각 요소를 boolean mask 를 이용하여 지정하는 방식
arr = np.arange(7) #[0 1 2 3 4 5 6]
print(arr[[1, 3, 5]]) #[1 3 5]
arr = np.arane(1, 10, 1).reshape(3, 3)
# [1 2 3]
# [4 5 6]
# [7 8 9]
print(arr[[0, 2]])
# [1 2 3]
# [7 8 9]
▶ fancy indexing : 배열의 각 요소를 index 배열을 전달하여 지정하는 방식
'인공지능 AI > 머신러닝' 카테고리의 다른 글
[머신러닝] 판다스(pandas) 패키지 (0) | 2023.01.16 |
---|