본문 바로가기

인공지능 AI/머신러닝

[머신러닝] 넘파이(Numpy) 패키지

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