[부스트캠프 Pre-Cource] 10. Numpy

김상윤·2022년 7월 31일
0

부스트캠프AI-PreCource

목록 보기
10/12

Numpy의 특징

Numpy의 특징

  • List에 비해 빠르고, 메모리 효율적
  • iteration(loop문) 없이 데이터 배열에 대한 연산(처리) 지원
  • 선형대수 관련 기능 제공

Array

import numpy as np

array 생성

  • np.array()
    -> ndarray 객체 생성
  • dynamic typing 지원 X
    : array는 하나의 data type만 배열에 넣을 수 있다.
    (list는 여러가지 type 하나의 배열에 넣을 수 있다.)
  • dtype을 통해 생성하는 array의 data type을 지정할 수 있다.
test_array = np.array(["1", "4", 5.0, 8], float)
test_array
# array([1., 4., 5., 8.])

array _ 메모리 구조

  • numpy array는 메모리에 데이터가 직접 연속적으로 저장된다.(c언어와 같은 방식)
    • python list는 data가 어딘가에 따로 저장되어 있고, 그 주소값을 통해 접근한다.
  • 메모리 접근성이 좋다
  • (is : 두 data의 메모리 위치를 비교)
a = [1,2,3]
b = [5,3,1]
a[0] is b[2] # True

a = np.array(a)
b = np.array(b)
a[0] is b[2] # Flase
  • 메모리 크기가 일정하기 때문에 할당에 효율적이다.

array 객체의 멤버변수

  • array.dtype
    • np.float64 선언 가능

      array.astype(int)
      : ndarray객체의 data type을 변경하는 numpy 함수

  • test_array.nbytes
    • 메모리 크기 반환
  • array.shape
    • 튜플 타입 반환 ex. (3, 3)
    • 추가되는 차원이 앞에 붙는다.
      1차원 : (n,)
      2차원 : (m, n)
      3차원 : (l, m, n)
      ...
    • 새로운 차원이 앞에 붙고 이전 차원이 뒤로 밀린다.
    • [[[], [], []], [[], [], []]]
      : 가장 바깥 [ ]로 표현될 수록 앞에 표시된다.
  • array.ndim
    • 몇 차원인지 반환
  • array.size
    • 전체 elements 개수 반환
    • ex.(3,2,3) -> 323 = 18
  • len(array)
    • 첫 번째 차원의 개수 반환
    • ex.(3,2,3) -> 3
test_array = np.array([1, 4, 5, "8"], float)
test_array.dtype  # dtype('float64')
test_array.shape # (4,)

Array의 함수

Reshape

array.reshape()

  • array.reshape(m,n)
    : array의 shape 크기 변경, element 갯수는 동일
  • -1을 넣으면 나머지 size에 맞게 알아서 배치
test_array = np.array([[1,2,3,4], [1,2,5,8]])
test_array.reshape(8,)
# array([1,2,3,4,1,2,5,8])
test_array.reshape(-1,4)
# array([1,2,3,4],
#		[1,2,5,8])
test_array.shape
# (4,2)

array.flatten()

  • 다차원 -> 1차원

indexing, slicing

  • indexing : list와 달리 [p,q] 표기법도 제공
test_array[1][2] == test_array[1,2]
  • list와 달리 행(row)과 열(column)을 따로 나눠서 slicing이 가능
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의 전체
  • [ startpoing : endpoint : step ]

newaxis

  • 새로운 축을 하나 추가
test_array = test_array[np.newaxis, :]

creation 생성

np.arange()

  • list의 range()와 같이 0 ~ n-1까지 범위의 값을 가지는 ndarray 생성
  • list와 달리 floating point로 step 파라미터 설정 가능

np.zeros()

  • 초기값 0으로 가득찬 ndarray 생성

np.ones()

  • 초기값 1로 가득찬 ndarray 생성

np.empty()

  • shape만 할당되고, 비어있는 ndarray 생성
  • 메모리에 이전에 사용하던 data가 있으면 그대로 반환된다.

np.someting_like()

  • 기존 다른 array와 같은 shape으로 새로운 초기값 1,0,empty인 ndarray 생성
  • np.zeros_like(), np.ones_like(), np.empty_like()

random sampling

  • np.random.uniform(a,b,n)
    • 균등분포
    • a~b사이에 균등분포로 n개의 값을 생성
  • np.random.normal(a,b,n)
    • 정규분포

행렬 생성

  • np.identity(n= , dtype= )
    • 단위행렬(i) 생성
  • np.eye()
    • 대각선이 1인, shape이 자유로운 행렬 생성
    • 1이 시작하는 index k를 변경 할 수 있다.
  • np.diag(array)
    • 행렬의 대각 행렬 값 추출

operation 연산

axis

  • operation function 실행할 때 기준이되는 dimension 축

    array의 shape
    1차원 : (n,)
    2차원 : (m, n)
    3차원 : (l, m, n)
    ...

    • 새로운 차원이 앞에 붙고 이전 차원이 뒤로 밀린다.
    • [[[], [], []], [[], [], []]]
      : 가장 바깥 [ ]로 표현될 수록 앞에 표시된다.
  • 앞 dimension부터 axis = 0, 1, 2 할당
    : (axis=0, axis=1, asix=2)

  • operation연산에 axis를 지정하면 해당 축 안에서, 해당 축을 기준으로 연산

    • 해당 축을 없앤다고 생각
    • 해당축의 값들을 연산해서 하나로 압축 한다고 생각
    • 2차원
      axis = 0 )
      : 한 열(column)에 있는 값들을 연산
      : 열(column) 하나를 값 하나로 만듬
      axis = 1 )
      : 한 행(row)에 있는 값들을 연산
      : 행(row) 하나를 값 하나로 만듬

array.sum() / mean() / std() / var()

mathmatical function

  • array의 각각의 element에 연산을 취하여 반환
    • np.sqrt(test_array)
    • np.exp(test_array)

convatenate

  • 두 nparray를 붙이는 함수

array간 operation

element-wise operation

  • 기본 사칙연산 지원
  • shape이 같을 때 일어나는 연산

dot product

  • 행렬 곱 연산
  • array_a.dot(array_b)

transpose

  • array.transpose()
  • array.T

broadcasting

  • shape이 다른 array간 연산 지원
  • +, -, *, /, //, **
  • Matrix - Scalar
    Vector - Scalar
    Matrix - Vector
    모두 지원

comparisons

array 조건문, np.all() / np.any()

  • array의 모든 elements에 대해 각각 조건문에 대한 Boolean값을 array로 반환
  • np.all(), np.any()

element-wise comparison operation

  • 같은 shape의 array간 같은 위치에 있는 element끼리 비교 연산 결과 Boolean값을 array로 반환
  • broadcasting도 일어난다.

np.where

  • np.where(조건문)
    : 조건문에 대해 True인 elements의 index만 반환
  • np.where(조건문, True일 때 값, Flase일 때 값)
    : True인 경우, Flase인 경우 각각 지정한 값으로 변환하여 반환

np.isnan()

: np.NaN인 경우 True를 나머지는 False를 반환

argmax, argmin

  • np.argmax(array)
    np.argmin(array)
  • array내 최대값, 최소값의 index 반환

boolean index

  • array의 indexing을 Boolean list로 넣어주면 True인 index의 값만 추출
  • array 비교연산자로 조건문을 만들면 Boolean array로 반환된다.
  • array[ array > x ]로 조건에 맞는 elements만 추출

fancy index

  • array의 indexing을 index list로 넣어주면 해당 index에 해당하는 값들 추출한 array 반환

data i/o

array의 연산 performance

0개의 댓글