Python 데이터 분석 및 인공지능 학습에 필수적인 라이브러리 Numpy

26201 단어 numpypythonnumpy

파이썬으로 진행되는 모든 데이터 분석 및 인공지능 학습에 있어서 필수적으로 이해해야하는 도구
Numerical Python의 약자로, 과학계산에서 많이 사용하는 선형대수의 계산식을 파이썬으로 구현할 수 있도록 도와주는 라이브러리이다.
행렬과 벡터와 같은 Array 연산에 있어서 사실상의 표준이라고 생각하면 된다.

넘파이의 특징

  • 일반 List에 비해 빠르고, 메모리 효율적
  • 반복문 없이 데이터 배열에 대한 처리를 지원함
  • 선형대수와 관련된 다양한 기능을 제공함
  • C, C++, 포트란 등의 언어와 통합 가능함

array creation

# Array Creation
test_array = np.array([1, 4, 5, 8], float)

# shape : numpy array의 dimension 구성을 반환함
a = [[1, 2, 3], [4, 5, 6], [4, 5, 6]]
np.array(a).shape

# (3,3)

# dtype : numpy array의 데이터 type을 반환함
test_array.dtype

# dtype('float64')

# ndim - number of dimensions

# size - data의 개수

# nbytes - ndarray object의 메모리 크기를 반환함
  • np.array 함수를 활용하여 배열을 생성한다
    (ndarray 객체)
  • 하나의 데이터 type만 배열에 넣을 수 있음
  • dynamic typing이 지원되지 않는다.

Handling Shape

reshape

🎶 Array의 shape의 크기를 변경함, element의 갯수는 동일하다
  • -1 : element의 갯수는 동일하기에, -1을 사용하면 size를 기반으로 자동으로 개수를 선정해준다.

flatten

🎶 flatten : 다차원 array를 1차원 array로 변환해준다.

indexing for numpy array

  • list와 달리 이차원 배열에서 [0,0] 표기법을 제공한다
  • 따라서 list와 달리 행과 열 부분을 나눠서 slicing이 가능하다
a = np.array([[1, 2, 3], [4.5, 5, 6]], int)
a[0,0]
a[0][0]

a[:,2:] # 전체 Row의 2열 이상
a[1,1:3] # 1 Row의 1열 ~ 2열
a[1:3] # 1 Row ~ 2 Row의 전체

Creation function

arange

🎶 array의 범위를 지정하여, 값의 list를 생성하는 명령어
  • 기본적으로 range를 떠올려서 사용하면 된다.
  • floating point도 사용 가능하다
np.arange(30)

np.arange(0, 5, 0.5)

zeros

🎶 0으로 가득찬 ndarray 생성

ones

🎶 1으로 가득찬 ndarray 생성

empty

🎶 shape만 주어지고 비어있는 ndarray를 생성한다. (memory initialization이 되지 않는다!) 주소만을 제공하고 미리 설정하는 것이기에, 이미 다른 값이 있는 경우도 있으니 참고하자!

something_like

🎶 기존 ndarray의 shape 크기만큼 1, 0 또는 empty array를 반환한다.
test_matrix = np.arange(30).reshape(5,6)

np.zeros(test_matrix) # shape이 같고, 모든 값이 0로 채워진 ndarray
np.ones_like(test_matrix) # shape이 같고, 모든 값이 1로 채워진 ndarray
np.empty_like(test_matrix) # shape이 같고 값이 비어있는 empty ndarray를 반환

identity

🎶 단위 행렬(i 행렬)을 생성함
np.identity(n=3, dtype=np.int8)

'''
array([[1, 0, 0],
			 [0, 1, 0],
			 [0, 0, 1]], dtype=int8)
'''

eye

🎶 대각선이 1인 행렬, k값의 시작 index의 변경이 가능
np.eye(3)

np.eye=(3, 5, k=2)
'''
array([[ 0., 0., 1., 0., 0.],
			 [ 0., 0., 0., 1., 0.],
			 [ 0., 0., 0., 0., 1.]])
'''

diag

🎶 대각 행렬의 값을 추출한다. k keyword를 통해 시작하는 index를 지정할 수도 있다.
matrix = np.arange(9).reshape(3,3)
np.diag(matrix)

# array([0, 4, 8])

random sampling

🎶 데이터 분포에 따른 sampling으로 array를 생성한다
np.random.uniform(0, 1, 10).reshape(2,5) # 균등분포
np.random.normal(0, 1, 10).reshape(2,5) # 정규분포

Operation functions

sum

🎶 ndarray의 element들 간의 합을 구함, list의 sum 기능과 동일
  • axis(실행할 때 기준이 되는 dimension 축)를 지정하여 연산을 진행할 수도 있다.

mean & std

mathematical functions (etc)

concatenate

🎶 numpy array를 합치는(붙이는 함수
# vstack 말 그대로 vertical
a = np.array([1, 2, 3])
b = np.array([2, 3, 4])
np.vstack((a,b))

# hstack 말 그대로 horizontal
a = np.array([ [1], [2], [3]])
b = np.array([ [2], [3], [4]])
np.hstack((a,b))

# concatenate : axis를 활용하여 붙이는 방향을 지정할 수도 있음
a = np.array([[1, 2, 3]])
b = np.array([[2, 3, 4]])
np.concatenate( (a,b), axis=0)

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
b = b[np.newaxis, :] # 축을 하나 추가해줌
np.concatenate( (a,b.T) , axis=1)

dot

🎶 Matrix 간 곱셈 (Element-wise 연산과 구분해야한다)

transpose

🎶 transpose 또는 T attribute 사용

Comparisons

All & Any

🎶 Array의 데이터 전부(and) 또는 일부(or)가 조건에 만족 여부 반환
a = np.arange(10)
# array([0, 1, 2, 3, 44, 5, 6, 7, 8, 9])

np.any(a>5), np.any(a<0)
(True, False) # any -> 하나라도 조건에 만족한다면 True를 반환한다.

np.all(a>5), np.all(a < 10)
(False, True) # all -> 모두가 조건에 만족한다면 True를 반환한다.

# logical_and : AND 조건의 condition
np.logical_and(a > 0, a < 3)

# logical_not : NOT 조건의 condition
np.logical_not(b)

# logical_or : OR 조건의 condition
np.logical_or(b, c)

np.where

a
# array([1., 3., 0.])

np.where(a > 2)
# (array([1]),)

np.where(a < 3)[0]
# array([0, 2])

np.where(a < 3, 3, 2) # where(condition, TRUE, FALSE
# array([3, 2, 3])

np.isnan(a)

np.isfinite(a)

# np.NaN, np.Inf

argmax & argmin

  • array내 최대값 또는 최소값의 index를 반환한다
  • axis 기반의 반환

boolean index

💡 특정 조건에 따른 값을 배열 형태로 추출할 수 있다. Comparison operation 함수들도 모두 사용가능하다.
test_array = np.array([1, 4, 0, 2, 3, 8, 9, 7], float)
test_array > 3

test_array[test_array > 3] # 조건이 True index의 element만 추출

fancy index

💡 boolean index와는 다르게 index값을 넣어준다. 즉, array를 index value로 사용해서 값을 추출한다
a = np.array([2, 4, 6, 8], float)
b = np.array([0, 0, 1, 3, 2, 1], int) # 반드시 integer로 선언해야 한다.
a[b]
# array([ 2., 2., 4., 8., 6., 4.])

a.take(b) # take 함수 : bracket index와 같은 효과이다.

loadtxt & savetxt

💡 text type의 데이터를 읽고, 저장할 수 있다!

좋은 웹페이지 즐겨찾기