본문 바로가기
인공지능/머신러닝

2. 머신러닝을 위한 넘파이(NumPy)

by 으노으뇨 2023. 9. 5.
728x90
반응형
SMALL
딥러닝을 위한 파이썬의 대표적 라이브러리
NumPy  Numerical Python : 선형대수, 난수 , n -array 사용 가능
Pandas 데이터 조작, 분석을 위한 광범휘한 도구 제공
Matplotlib 데이터 시각화 및 시각화를 통한 데이터 탐색 가능
scikit-learn NumPy와 Pandas 등과 원활하게 연동되는 데이터 과학 관련 모듈
TensorFlow
(Keras)
딜버닝 모델 구축 및 학습 가능
PyTorch 딥러닝 프레임워크

NumPy란?

행렬이나 대규모의 배열을 쉽게 처리할 수 있도록 도와주는 파이썬 라이브러리

  • 백터, 행렬의 형태로 데이터 표현 및 연산을 한다.
    * numPy 를 이용하여 데이터를 행렬 또는 벡터의 형식으로 변환
  • 웹사이트
    www.numpy.org
  • 발표일
    1995(Numeric), 2006년
  • 설치방법 
    1. cmd에서 pip install numpy 로 설치
    2. 구글 Colab 사용


Numpy 문법

  • 딥러닝은 데이터 학습을 통하여 예측이 가능, 학습을 위한 훈련 데이터는 2,3차원 행렬의 형태를 가진다.
    - 열 : 하나의 특징 ( 속성 )
    - 행 : 하나의 훈련 데이터
  • 넘파의 다차원 배열 데이터 구조 : ndarray(n-dimensional array)
  • 넘파이를 이용하여 행렬을 통한 데이터 접근 및 연산 가능
배열생성
자료형 배열 생성 시 기본 자료형은 numpy.float64이며 명시적으로 numpy.int32, numpy.unicode 등 직접 지정 후 생성 가능
생성 방법 배열객체 = numpy.array([])
- .array : 생성자 함수
- ([]) : 파이썬 리스트
배열객체 = numpay.arange(시작값, 종료값, 간격)
- 시작값 ~ 종료값 -1 까지 간격을 지정하여 생성
ex ) arange(시작값, 종료값)  : 시작값 ~ 종료값 -1 까지 1씩 증가하며 생성
배열 객체 = numpy.zeros((행의 갯수, 열의갯수))
-지정된 개수만큼 0을 채운 행렬 생성
배열객체 = numpy.ones((행의 갯수, 열의 갯수))
-지정된 개수만큼 1을 채운 행렬 생성
배열객체 = numpy.eye(n)
- 0행 0열 부터 시작하여 대각선으로 n개 만큼 1, 나머지는 0을 채운 행렬 생성
배열객체 = numpy.linespace(시작값, 종료값, 개수)
- 시작값 ~ 종료값의 수들이 n개 균일하게 생성
배열 다루기  배열정렬 - numpy.sort
배열 합치기 - numpy.concatenate((행렬1, 행렬2),axis = 0 또는 1) 
- axis = 0일경우 : 세로로 합치기
- axis = 1일경우 : 가로로 합치기
형상 확인 : .shape
차원확인 : .ndim
형상 변환 : .reshape(행, 열)
-> 3행 1열의 numpy 데이터를 1행 3열로 변환 등 행과 열을 변환
인덱싱과 슬라이싱 

1차원

배열객체 numpy.array([ ... ])
배열객체 [ a : b ] a~ab-1 번째 까지 슬라이싱
배열객체 [:b]
0~b-1번째까지 슬라이싱
시작 인덱스나 종료 인덱스는 생략가능
변수 = 배열객체 [비교연산] tmp = np.array([1,2,3,4,5])
tmp2 = tmp > 3
print(tmp2) 
print(tmp[tmp2])

2차원

배열객체 numpy.array( [ [ ] , [ ] ... )
배열객체 [ a, b ] a행 b열값 검색
배열객체 [ n1 : n2 , n3 : n4 ] n1 ~ ( n2 -1 ) 행, n3 ~ ( n4 - 1 ) 열 검색
 산술연산
+, -, *, / (사칙연산) 각 행렬의 동일한 위치의 원소와 연산 import numpy as np
a=np.array([1,2,3])
b=np.array([1,2,3])
a+b
결과 : array([2, 4, 6]
행렬 곱





⦁ 주의 : 앞 행렬의 행의 개수 == 연산되는 행렬의 열의 개수
⦁ 머신러닝의 이미지 프로세싱에서 많이 사용
numpy.dot(행렬1, 행렬2)
numpy.matmul(행렬1, 행렬2)
  1. 기본적으로 행렬곱은 2개의 행렬에 대한 연산을 함
  2. 3개 이상의 행렬에 대한 곱을 하려면 여러 개의 행렬곱 함수를 사용해야함
  3. 1차원 벡터들만 포함된 행렬곱 : 벡터 원소간 내적의 합을 구함
  4. 행렬 * 스칼라의 행렬곱 : 행렬의 각 원소에 대하여 단순 스칼라를 곱한 합을 구함
  5. 행려1 * 행렬2 : 행렬1의 열의 수 == 행렬2의 행의 수 인 경우만 행렬곱 가능
  6. 행렬 * 백터 : 행렬의 각 행과 벡터 원소간 내적의 합을 구함
  7. 벡터 * 행렬 : 행렬간 행렬곱 구하는 방식과 같음
1차원 벡터들만 포함된 행렬곱 a=np.array([1,2,3])
b=np.array([1,2,3])
np.dot(a,b)

#[14]
행렬과 스칼라의 행렬곱 a=np.array([1,2,3])
b=2
np.dot(a,b)

# [2,4,6]
행렬 ×벡터 a = np.array([[1, 3], [2, 4]])
#2*2
b = np.array([2, 5])
#벡터
np.dot(a, b)

#[17, 24]
벡터 ×행렬 a = np.array([[1, 3], [2, 4]])
#2*2
b = np.array([2, 5])
#1*2
np.dot(b, a)

# [12, 26]
브로드 캐스팅연산 행렬 간 연산 시 연산할 데이터의 수가 부족할 경우 : 브로드 캐스팅을 통하여 데이터를 행 단위로 반복하여 노출 후 연산 import numpy as np
i=np.array([[1,2],[3,4]])
j=np.array([[1,2]])
print(i)
[[1 2]
[3 4]]

print(j)
[[1 2]]

print(i+j)
[[2 4]
[4 6]]
전치행렬 원본 행렬의 행과 열을 전치 (3*2->2*3) import numpy as np
a=np.array([[1,2,3],[3,4,5]])
print(a.T)
iterator 1. nditer(): 행렬의 모든 원소 방문하기 위하여 사용
▶ 결과는 읽어들인 원소들의 첫 번째 값
◻ while 문을 이용하여 첫 번째 원소의 값부터 하나씩 접근 가능
◻ 행 우선으로 원소의 값 접근
2. iternext()를 통해 원소의 처음부터 끝까지 순차적으로 읽음
numpy.nditer(
행렬
, flags=[옵션]
, op_flags=[옵션])
flags=['multi_index‘] : array요소의 인덱스 값을 구함
op_flags=['readwrite'] : 읽기, 쓰기 모두 가능한 상태
파일 데이터 읽기 numpy.loadtxt(“파일명”, delimiter=‘분리자’) tmp=np.loadtxt('1.txt', delimiter=',', dtype=np.int32)
>>> tmp array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
기타 함수 ⦁ .random.rand(n)
▶ 0~1의 소수 n개 생성
⦁ .random.rand(a,b)
▶ 0~1의 소수를 a행 b열의 크기로 생성
⦁ .sum(행렬), min(행렬), max(행렬)
⦁ .exp(행렬)
⦁ .log(행렬)
⦁ .argmax or .argmin(행렬, axis=0 or 1)
▶ 행렬의 열 또는 행 단위 최대값의 인덱스 리턴
▶ axix= 0 : 열 기준
▶ axix= 1 : 행 기준
 

 

728x90
반응형
LIST

댓글