글을 시작하며

부스트캠프에서 수업을 한 Numpy부분을 정리하고 공부하기 위해서 작성합니당

계속 하는데 잘 까먹는다...하면서 글을 시작!😂

 

Numpy란?

  • Numerical Python
  • 파이썬의 고성능 과학 계산용 패키지
  • Matrix와 Vector와 같은 Array 연산의 사실상의 표준
  • 한글로 넘파이로 주로 통칭
  • 일반 List에 비해 빠르고, 메모리 효율적
  • 반복문 없이 데이터 배열에 대한 처리를 지원함
  • 선형대수와 관련된 다양한 기능을 제공함
  • c, c++, 포트란 등의 언어와 통합가능

ndarray

import numpy as np

test_array = np.array([1, 4, 5, 8], float)
print(test_array)
type(test_array[3])

# [1. 4. 5. 8.]
# numpy.float64
  • numpy는 np.array 함수를 활용 배열을 생성함. → ndarray(객체)
  • numpy는 하나의 데이터 type만 배열에 넣을 수 있음.
  • List와 가장 큰 차이점 → dynamic typing not supported
  • C의 Array를 사용하여 배열을 생성함.
  • numpy array는 차례대로 값이 저장되는 반면 파이썬의 List는 값의 주소값을 List에 넣어서 2번 들어가는 방식이다.(-5 ~ 256은 고정 주소값)
  • 타입도 일정하기 때문에 메모리도 효율적이다.
test_array = np.array([1, 4, 5, "8"], float) # String Type의 데이터를 입력해도

print(test_array)
print(type(test_array[3])) # Float Type으로 자동 형변환을 실시
print(test_array.dtype) # Array(배열) 전체의 데이터 Type을 반환함
print(test_array.shape) # Array(배열) 의 shape을 반환함
print(test_array.nbytes) # ndarry object의 메모리 크기를 반환함.

# [1. 4. 5. 8.]
# <class 'numpy.float64'>
# float64
# (4,)
# 32  -> float64는 8bytes 이므로  4 * 8 = 32

 

numpy Rank

 

Hadling Shape

reshape : Array의 shape의 크기를 변경함, element의 갯수는 동일

  • reshape에서 (-1, n) 하면 n으로 지정하고 나머지 사이즈에 맞춰서 넣어진다.
  • ex : (2,4)를 reshape(-1,2) 하면 reshape(4,2)와 같다.

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

ravel : 다차원 array를 1차원 array로 변환.

a = np.array([[1,2,3,4],[5,6,7,8]])

a1 = a.flatten()
a2 = a.ravel()
a3 = a.reshape(-1)

# array([1, 2, 3, 4, 5, 6, 7, 8])
# array([1, 2, 3, 4, 5, 6, 7, 8])
# array([1, 2, 3, 4, 5, 6, 7, 8])

a[0][0] = 100
a

# array([[100,   2,   3,   4],
#       [  5,   6,   7,   8]])

a1
# array([1, 2, 3, 4, 5, 6, 7, 8])
a2
# array([100,   2,   3,   4,   5,   6,   7,   8])
a3
# array([100,   2,   3,   4,   5,   6,   7,   8])

 

위에서 보이는 것처럼 reshape과 flatten, reval로 1차원으로 만들 수 있습니다. 각각의 함수에 차이점이 있다면 아래와 같습니다.

numpy.ravel() numpy.reshape() numpy.ndarray.flatten()
1차원배열(contiguous flattened array)반환 데이터 변경 없이 형상만 변경하여 반환 1차원배열 복사본을 반환
원본 값 변경시 같이 변함 원본 값 변경시 같이 변함 원본 값 변경시 변하지 않음.

Indexing & Slicing

index : List와 달리 이차원 배열에서 [0,0]표기법을 제공함.

  • matrix 일 경우 앞은 row, 뒤는 column을 의미함.

slicing : List와 달리 행과 열 부분을 나눠서 slicing이 가능함.

  • matrix의 부분 집합을 추출할 때 유용함.
a = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], int)

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

Create Function

arange : array의 범위를 지정하여, 값의 list를 생성하는 명령어

np.array(30) # List의 range와 같음.
np.arange(0,5,0.5)  # (시작, 끝, step
np.arrange(30).reshpae(5,6)

zeros : 0으로 가득찬 ndarray 생성 np.zeros(shape, dtype, order)

ones : 1로 가득찬 ndarray 생성

empty : shape만 주어지고 비어있는 ndarray 생성 (memory initialization이 되지 않음)

something_list : 기존 ndarray의 shape 크기 만큼 1, 0 또는 empty array를 반환

identity : 단위행렬(i행렬)을 생성함.

eye : 대각선이 1인 행렬, k값의 시작 index의 변경이 가능.

diag : 대각 행렬의 값을 추출함.

random sampling : 데이터 분포에 따른 sampling으로 array를 생성 (시작, 끝, 개수)

+ Recent posts