본문 바로가기
python

[python]파이썬 - numpy

by skysline 2023. 2. 10.
반응형

Numpy 란?

  • 수치 계산을 하기위한 파이썬 라이브러리
  • 딥러닝에서 사용되는 텐서와 매우유사
  • 백터와 행렬 단위의 대용량 수치 연상을 빠르게 진행
    • 병렬 연산한다
  • 백처(vector)
    • 1차원 데이터(1차원 배열)
    • 스칼라가 연속적으로 여러개 모여 있는것
      • 스칼라(scalar) : 단순하게 측정한 하나의 값
  • 행렬(Matrix)
    • 2차원 데이터(2차원 배열)
    • 1 차원 데이터가 여러개 모여 있는것
import numpy as np

백터

lst = [1,2,3,4,5,6]
arr = np.array(lst)
arr

# 출력
array([1, 2, 3, 4, 5, 6])

행렬

lst =[
    [1,2,3],
    [4,5,6]
    
]
arr = np.array(lst)
arr

# 출력
array([[1, 2, 3],
       [4, 5, 6]])
lst = [
    [
        [1,2,3],
        [4,5,6],
        [1,1,1]
    ],
    [
        [7,8,9],
        [10,11,12],
        [1,1,1]
    ]
]
arr = np.array(lst)
arr

# 출력
array([[[ 1,  2,  3],
        [ 4,  5,  6],
        [ 1,  1,  1]],

       [[ 7,  8,  9],
        [10, 11, 12],
        [ 1,  1,  1]]])
type(arr)

# 출력
numpy.ndarray

인덱싱과 슬라이싱

  • 기본적으로 파이썬에서 사용되는 인덱싱과 슬라이싱을 그대로 따라간다.
arr[1:3]

# 출력
array([2, 3])
  • 다차원 슬라이싱
arr = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9],
    [10,11,12]
])
arr

# 출력
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])
arr[0::3,0::2]

# 출력
array([[ 1,  3],
       [10, 12]])
       
arr[::2,::2]

# 출력
array([[1, 3],
       [7, 9]])
       
arr.shape[0] # 행 갯수

#출력
4

arr.shape[1] # 열 갯수

#출력
3

자주쓰는 numpy 데이터 타입

np.array([1,2,3],dtype = np.int32) # 4 바이트 크기의 정수  1 바이트 =8
np.array([1,2,3],dtype = np.int64) # 8 바이트 크기의 정수
np.array([1,2,3],dtype = np.uint8) # 1바이트 크기의 부호 없는 정수(0~255)
np.array([1,2,3],dtype = np.float32) # 4바이트 크기의 실수
np.array([1,2,3],dtype = np.float64) # 8바이트 크기의 실수
np.array([1,0,1],dtype = np.bool_) # 불 자료형

마스킹(masking)

  • boll 배열을 마스크로 사용하여 데이터의 특정 부분을 선택하수 있다.
mask_list = [True,False,True,False]
arr[mask_list]

# 출력
array([[1, 2, 3],
       [7, 8, 9]])
mask_list = [True,False,True]
arr[:,mask_list]

#출력
array([[ 1,  3],
       [ 4,  6],
       [ 7,  9],
       [10, 12]])
mask = arr > 2
mask

# 출력
array([[False, False,  True],
       [ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True]])
arr[mask] # 모든 스칼라에 마스킹을 할경우 백터로 반환된다.

# 출력
array([ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12])
  • 여러개의 인덱스 값들을 이용해서 가져오기
index_list = [0,2]
arr[index_list]

# 출력
array([[1, 2, 3],
       [7, 8, 9]])

numpy 함수

  • 배열의 각 요소별로 연산
arr1 = np.array([1,5,1])
arr2 = np.array([3,2,7])

np.add(arr1,arr2)# (+)

# 출력
array([4, 7, 8])
arr * 2

# 출력
array([[ 2,  4,  6],
       [ 8, 10, 12],
       [14, 16, 18],
       [20, 22, 24]])
arr * np.array([
    [1],
    [2],
    [3],
    [4],
])

# 출력
array([[ 1,  2,  3],
       [ 8, 10, 12],
       [21, 24, 27],
       [40, 44, 48]])
  • Norm
  • 백터의 크기를 측정하는 함수
np.linalg.norm([-1,2,3])

# 출력
3.7416573867739413
  • 내적(dot product)
    • 두벡터의 각요소끼리의 곱의합
    • 결과값은 스칼라
a = np.array([1,2,3]) # 사과 딸기 참외
b = np.array([4,5,6])
np.dot(a,b)

# 출력
32
  • 행렬곱
    • 2차원 공간에서 내적을 한다.
    • 앞에 행렬의 열개수와 뒤에 행렬의 행개수가 동일해야한다.
    • 연산결과의 shape 앞에 핼렬의 행개수와 뒤에 행렬의 열개수가 나온다.
x = np.array([
    [80,90,70],
    [81,93,72],
    [71,73,62],
    [61,70,72] # 한행은 한학생 과거 모의고사 점수
])

w = ([
    [0.4],
    [0.2],
    [0.3]
])
x @ w

# 출력
array([[71. ],
       [72.6],
       [61.6],
       [60. ]])

배열만들기

  • np.arange
    • range 함수와 비슷하지만 ndarray 가 반환된다.
q = np.arange(10)
q[1::2]   

# 출력
array([1, 3, 5, 7, 9])

np.zeros

  • 0으로 채워진 배열 만들기
np.zeros([4,1,3])

# 출력
array([[[0., 0., 0.]],

       [[0., 0., 0.]],

       [[0., 0., 0.]],

       [[0., 0., 0.]]])

np.ones : -1로 채워진 배열

반응형

댓글