AI/파이썬 머신러닝 완벽 가이드

넘파이

ardoh 2024. 5. 24. 10:14

1. 넘파이

1.1 넘파이란?

  • 머신러닝의 알고리즘은 선형대수와 통계에 기반한다. 
  • Numerical Python 을 의미하는 NumPy는 선형대수 기반의 프로그램을 지원하는 패키지이다. 

1.2 특징

  • 루프를 사용하지 않고 대량 데이터의 배열 연산이 가능하므로 연산 속도가 빠르다.
  • 파이썬 언어가 가지는 수행 성능의 제약이 있으므로 C/C++ 기반으로 코드를 작성하고 이를 넘파이에서 호출하는 방식으로 통합할 수 있다.
  • 딥러닝 프레임워크인 텐서플로는 이러한 방식으로 배열 연산 수행 속도를 개선하고 넘파이와 호환된다.
  • 행열 데이터의 가공과 변환 등은 파이썬의 대표적 데이터 처리 패키지인 판다스가 넘파이보다 더 편리하다.

2. ndarry

2.1 개요

넘파이의 기반 데이터 타입인 ndarray 을 이용해 다차원 배열을 생성하고 사용할 수 있다.

 

🥧 np.array()
리스트와 같은 인자를 입력 받아서 ndarray 로 변환한다.

🥧 shape
행과 열의 수를 알 수 있다.

  • 차원
    • ndarray.ndim으로 확인 가능
    • [ ] : 1차원
    • [[ ]] : 2차원

2.2 데이터 타입

  • 같은 데이터 끼리만 연산 가능
  • dtype 으로 데이터 타입 확인 가능
  • astype 으로 ndarray내 데이터값의 타입 변경
  • 만약, 다른 데이터 타입이 섞여 있으면, 크기가 더 큰 데이터 타입으로 형 변환이 된다.
int_array.astype('float64') #int 배열을 float로 바꾸기

2.3 생성 - arange, zeros, ones

🥧 arange(n)

0부터 n-1까지의 연속 숫자 값

np.arange(10) # [0 1 2 3 4 5 6 7 8 9]

🥧 zeros(튜플의 shape) ones(튜플의 shape)

0 혹은 1 로 채운다.

zero_array=np.zeros((3,2), dtype='int32') 
/* [[0 0]
 [0 0]
 [0 0]] */

2.4 변경 - reshape

  • 특정 차원 및 크기로 변환
array1=np.arange(10)
array2=array1.reshape(2,5)

  • 인자로 -1 을 사용하면 크기에 맞게 자동으로 변환 해준다.
array1=np.arange(10) # [0 1 2 3 4 5 6 7 8 9]

array2=array1.reshape(-1,5) # (2, 5)로 자동 변환
  • reshape (-1,1)
    • 원본 ndarray가 어떤 형태라도 2차원이고, 여러 개의 row를 가지되 반드시 1개의 column을 가진 ndarray로 변환된다.

2.5 인덱싱

🥧 단일 값 추출

array1d=np.arange(start=1, stop=10)
array2d=array1d.reshape(3,3) 

print('row=0, col=0) :', array2d[0,0])
print('row=0, col=1) :', array2d[0,1])

  • row는 axis 0, column 은 axis 1로 표현하는 것이 정확하다.
  • 3차원의 경우 axis 3은 높이를 가리킨다.

🥧 슬라이싱

  • 연속한 데이터 추출
  • 단일값 추출과 달리 슬라이싱, 팬시 인덱싱, 불린 인덱싱으로 추출된 뎅터 세트는 모두 ndarray 타입이다.
  • 시작, 종료 인덱싱은 생략 가능
array2d[1:3,:]
/* [[4 5 6]
 [7 8 9]] */

array2d[:,:]
/* [[1 2 3]
 [4 5 6]
 [7 8 9]] */

array2d[0]
/* [1 2 3] */

🥧 펜시 인덱싱

  • 인덱스 집합을 지정하면 해당 위치의 인덱스에 해당하는 ndarray 반환
    • array2d[[0,1],2] 의 경우 인덱싱이 (0,2) (1,2) 로 적용되어 [3.6]을 반환

🥧 불린 인덱싱

  • 조건 필터링과 검색을 동시에 할 수 있다.
  • array [조건]
array1d # [1 2 3 4 5 6 7 8 9]
array3=array1d[array1d>5] # [6 7 8 9]

2.6 행렬의 정렬 - sort, argsort

🥧 행렬 정렬 종류

 

 np.sort ndarray.sort
넘파이에서 호출 행렬 자체에서 호출
원 행렬은 유지. 원 행렬의 정렬된 행렬을 반환 원 행렬 자체를 정렬한 형태로 반환
  • 기본적으로 오름차순
  • 내림차순은 np.sort()[::-1]

🥧 2차원 행렬 정렬

array2d=np.array([[8,12],[7,1]])
sort_array2d_axis0=np.sort(array2d, axis=0)
print('로우 방향으로 정렬:\\n', sort_array2d_axis0)

sort_array2d_axis1=np.sort(array2d, axis=1)
print('칼럼 방향으로 정렬:\\n', sort_array2d_axis1)

🥧 정렬된 행렬의 인덱스 반환 argsort

org_array=np.array([3,1,9,5])
sort_indices=np.argsort(org_array) # [1 0 3 2]

2.7 선형대수 연산

🥧 행렬 곱 np.dot(행렬, 행렬)

🥧 전치 행렬 np.transpose(행렬)

 

'AI > 파이썬 머신러닝 완벽 가이드' 카테고리의 다른 글

회귀  (0) 2024.07.04
분류  (0) 2024.05.24
평가  (0) 2024.05.24
사이킷런  (0) 2024.05.24
판다스  (0) 2024.05.24