[Numpy] 넘파이 요약정리

Updated:

넘파이 ndarray

ndarray: N 차원(Dimension) 배열(Array) 객체

ndarray 생성

import numpy as np
array1 = np.array([1,2,3])
array2 = np.array([1,2,3],
                 [2,3,4])

Numpy 모듈의 array() 함수로 생성, 인자로 주로 파이썬 list 또는 ndarray 입력

ndarray 형태(Shape)와 차원

array 차원 Shape
[1 2 3] 1차원 (3,)
[[1 2 3]
[4 5 6]]
2차원 (2, 3)

ndarray의 shape는 ndarray.shape 속성으로, 차원은 ndarray.ndim 속성으로 알 수 있다.

ndarray 타입(type)

  • ndarray내의 데이터값은 숫자 값, 문자열 값, bool 값 등이 모두 가능하다.
  • ndarray내의 데이터 타입은 그 연산의 특성상 같은 데이터 타입만 가능하다.
[1 2 3]
[1.1 2.1 3.2]
['홍길동']
[True False True]

ndarray내의 데이터 타입은 ndarray.dtype으로 확인할 수 있다.

ndarray 타입(type) 변환

astype()을 이용하여 변환할 수 있다.

  • 변경을 원하는 타입을 astype()에 인자로 입력
  • 대용량 데이터를 ndarray로 만들 때 메모리를 절약하기 위해 자주 사용.
    • 0, 1, 2와 같이 크지 않는 범위의 숫자를 위해서 64bit float 형 보다는 8bit 또는 16bit integer형으로 변환하자.

넘파이 ndarray의 axis 축

ndarray의 shape는 행, 열, 높이 단위로 부여되는 것이 아니라 axis0, axis1, axis2와 같이 axis 단위로 부여된다.

axis 0은 행 방향, axis 1은 열 방향이다.

ndarray 초기화

특정 크기와 차원을 가진 ndarray를 연속값이나 0또는 1로 초기하 생성해야 할 경우 arange(), zeros(), ones()를 이용할 수 있다.

import numpy as np
np.arange(10)
np.zeros((3, 2), dtype='int32')
np.ones((3, 2))

ndarray 차원과 크기 변경

reshape()는 ndarray를 특정 차원 및 형태로 변환한다. 변환 형태를 함수 인자로 부여하면 된다.

reshape(-1, 5)와 같이 인자에 -1을 부여하면 -1에 해당하는axis의 크기는 가변적이되 -1이 아닌 인자값(여기서는 5)에 해당하는 axis 크기는 인자값으로 고정하여 ndarray의 shape를 변환한다.

import numpy as np
a = np.arange(10)
a = a.reshape(-1,5)
[[0 1 2 3 4]
[5 6 7 8 9]]

reshape()는 reshape(-1, 1), reshape(-1,)과 같은 형식으로 변환이 요구되는 경우가 많다.

import numpy as np
a = np.arange(5)
a = a.reshape(-1, 1)
a
b = np.array([[0] [1] [2] [3] [4]])
b = b.reshape(-1,)
b
[[0] [1] [2] [3] [4]]
[0 1 2 3 4]

ndarray 데이터 세트 선택하기 (인덱싱)

  • 특정 위치의 단일값 추출: 원하는 위치의 인덱스 값을 지정하면 해당 위치의 데이터가 반환
  • 슬라이싱: 연속된 인덱스상의 ndarray를 추출
  • 팬시 인덱싱: 일정한 인덱싱 집합을 리스트 또는 ndarray 형태로 지정해 해당 위치에 있는 ndarray를 반환
  • 불린 인덱싱: 특정 조건에 해당하는지 여부인 True/False 값 인덱싱 집합을 기반으로 True에 해당하는 인덱스 위치에 있는 ndarray를 반환한다.

단일 값 추출

# 1차원
array1[3]
array1[-2]
array1[-1]

# 2차원
array2d[0, 0] = 1
array2d[0, 1] = 2
array2d[1, 0] = 4
array2d[2, 2] = 9

슬라이싱

슬라이싱은 :을 이용하여 연속된 값을 선택한다.

# 1차원
array1[:]
array1[:3]
array1[3:]
array1[1:3]
# 2차원
array2d[ 0:2, 0:2 ]
array2d[1:3, 0:3]
array2d[1:3, :]
array2d[:, :]
array2d[:2, 1:]
array2d[:2, 0]

팬시 인덱싱

슬라이싱과 유사하지만 불연속된 값을 반환한다.

# 1차원
array1 = np.array([10,9,8,7,6,5,4,3,2,1])
print(array1[[2,4,7]])
# 결과 - [8 6 3]

불링 인덱싱

조건 필터링과 검색을 동시에 할 수 있기 때문에 매우 자주 사용되는 인덱싱 방식이다.

array1 = np.arange(10)
array1[array1 > 5]
array([6, 7, 8, 9])

배열의 정렬 - sort() 와 argsort()

sort()

  • np.sort(): 원 행렬은 그대로 유지한 채 원 행렬의 정렬된 행렬을 반환
  • ndarray.sort()는 원 행렬 자체를 정렬한 형태로 반환하며 반환 값은 None

argsort()

  • 원본 행렬 정렬 시 정렬된 행렬의 원래 인덱스를 필요로 할 때 np.argsort()를 이용한다.

원본 행렬이 [3, 1, 9, 5]라면 sort하면 [1, 3, 5, 9]가 되는데 원본 인덱스인 1 0 3 2를 반환.

선형 대수 연산

  • 행렬 내적: np..dot(A, B)
  • 전치 행렬: np.transpose(A)

참고 자료

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

Categories:

Updated:

Leave a comment