[BoostCamp AI Tech / Day 3] Numpy(1/3)

newbie·2021년 8월 4일
0

[boostcampAI U stage] week1

목록 보기
12/21

실습 코드는 코랩으로 진행

파이턴 데이터 처리 문제점

  • python은 interpreter 언어로 처리 속도가 문제
  • list 형태 등 메모리가 비효율적(시퀀스형 자료형에 대핵 각각 메모리 주소를 가리킴)
  • 그러므로 적절한 패키지 활용이 필수 => "NumPy"

Numerical Python - numpy

  • 파이썬의 고성능 과학 계산용 패키지
  • **matrix와 Vector와 같은 Array 연산의 사실상의 표준

numpy 특징

  • 일반 list에 비해 빠르고, 메모리 효율적
    • ndarray
      • 입력된 데이터가 차례대로 메모리에 할당되어 붙어있음
      • 해당 메모리 주소의 값이 변경되도 메모리 주소가 변경되지 않고 값 자체만 변경됨
      • 메모리 위치 고려 X
      • ndarray 생성 시 data type을 결정하여(dynamic typing 불가) 메모리 크기가 일정하여 데이터 저장 공간을 확보하기에도 좋음
    • list
      • -5~256의 값이 정해진 공간에 있어서 값 자체가 그 주소값을 리스트에 차례대로 저장
      • 따라서 그 주소를 한 번 더 타고 들어가야 값을 출력할 수 있음
      • 기존 값이 변경되는 경우 해당 리스트의 주소를 타고 들어가서 값을 변경해야 하는 문제가 생김
  • 반복문 없이 데이터 배열에 대한 처리를 지원
  • 선형대수와 같은 다양한 기능 제공
  • C,C++,포트란 등의 언어와 통합 가능

numpy 활용

array 구조

  • numpy는 np.array 함수를 활용하여 배열을 생성
  • ndarray 객체
  • 단, 하나의 데이터 type만 배열에 넣을 수 있음
  • list와 가장 큰 차이점 -> dynamic typing 지원 안함
  • array rank
    • 0 : scalar(ex, 7)
    • 1 : vector(ex, [10,10]
    • 2 : matrix(ex, [[10,10],[15,15]]
    • 3 ; 3D Tensor(ex, [[[1,2,3],[2,3,4]],[[11,22,33],[22,33,44]]])
    • n : n차원 Tensor
  • array.dtype : 데이터 타입 출력
  • array.shape : array 구조
  • array.ndim : array 차원
  • array.reshape(c1,c2,c3) : ndarray의 구조 변경
    • (c1,c2,c3) 구조
    • (2,) 이면 (2,n//2) 구조로 구조가 변함
    • (-1,)로 하면(1,element 개수) 형태로 출력됨
  • flatten() : 다차원 array를 1차원 array로 변환 (= reshape(-1,)

numpy handing 함수

  • indexing
    • list indexing 방식 + ndarray[1,2](콤파 표기법도 제공)
    • ndarray[1][2] == ndarray[1,2] : 1행 2열 값
  • slicing
    • 행과 열을 나눠서 가능
    • ndarray[2:4, 1:3] : 2~3행의 1~2열 값 출력
  • arange
    • range()와 같은 역할을 하지만 floating point도 가능
    • arange(0,11,2.5) => 0.0, 2.5, 5.0, 7.5, 10.0
  • zeros(shape = (), dtype = 데이터타입) or ones
    • 모든 원소가 0(or 1)인 array
  • empty()
    • 메모리만 주어지고 빈 array
    • 메모리 주소가 이전에 다른 객체가 사용했을 경우 값을 반환
  • ones_like(array이름), zeros_like, empty_like
    • 입력한 array와 동일한 크기지만 모든 원소의 값이 1인 array 반환
  • identity - 단위 행렬 생성
  • diag : 특정 array의 대각행렬 값만 출력
  • random sampling
    • np.random.uniform(n1,n2,n개)n1부터 n2까지 n개 출력(균등분포)
    • np.random.normal(0,1,10) (정규분포)
  • 연산 axis 지정 시 해당 기준으로 연산
    • axis = 0: axis 1,...,n : 앞 차원부터 1 뒤로 갈수록 0
      • ex) (2,2) array : 0 = 행 기준, 1 = 열기준

numpy 연산

  • array.sum()
  • array.mean()
  • array.median()
  • numpy mathematical function 찾아보기
  • concat
  • np.vstack(a1,a2) 행 기준으로 붙임 : (1,3)(1,3) => (2,3)
    • np.concatenate(a1,a2), axis = 0)
  • np.hstack(a1,a2) 열 기준으로 붙임 : (1,3)(1,3) => (1,6)
    • np.concatenate(a1,a2), axis = 1)
  • 곱셈 연산
    • array * array : element-wise operation(같은 위치의 원소끼리 연산)
    • a1.dot(a2) : 내적
  • 전치(Transpose)
    • a1.T
  • 브로드캐스팅
    • shape이 다른 배열 간 연산을 지원
    • 작은 크기의 array가 큰 크기의 array 형태로 변환
      • ex) a1 = [[1,2,3],[4,5,6]], a2 = [[1],[5]]
        a1+a2 => [[2,3,4],[9,10,11]]
    • 덧셈, 뺄셈, 원소곱, 원소나눗셈, 몫, 제곱 등 다 가능
    • [주의사항!!!] 브로드 캐스팅이 발생하면 불균형한 데이터 형태를 맞춰줘서 간편하게 연산을 수행할 수 있지만, 잘못된 데이터에 대한 연산 수행 시 자동으로 브로드캐스팅이 발생하여, 차후에 어디서 에러가 발생한지 찾기 어려움

numpy 조건

  • < <= >= 등 python과 동일하게 사용 가능

  • all, any를 통해 조건 만족 여부 반환
    • np.all(a > 5), np.any(a == 5)
  • np.logical_and(a>0, a<3) #and 조건
    • a가 boolean형 ndarray일 시 : np.logical_and(a) 처럼도 가능
  • np.logical_not(a>0, a<3) #not 조건
  • np.logical_or(a>0, a<3) #or 조건
  • np.where(condition,True,False) : np.where(a==1,1,0)
    • condition 조건에 의해 True or False로 반환된 값을 변환하여 출력
  • np.isnan(a) # np.NaN이 있는지
  • np.isfinite(a) #inf가 있는지
  • np.argmax() # 최대 값 index 반환
  • np.argmin() # 최대 값 index 반환
    • argmax,argmin 둘 다 axis를 지정할 경우 특정 조건(행,열 등)의 최대 혹은 최소값의 index 반환
  • np.argsort() # 오름차순 기준으로 값의 index 순서 반환, 내림차순 np.argsort()[::-1]
  • boolean index
    • condition = tmp > 5, tmp_array[condition]
    • condition 조건에 맞는 값만 반환
  • fancy index
    • index 값이 포함된 array = index_array
    • value 값이 포함된 array = value_array
    • value_array[index_array] => index_array에 있는 index 순서대로 value_array의 값을 반환
      • index array를 행과 열로 나눠서도 가능
      • 행 index array : row_array, 열 index array : col_array
      • value_array[row_array, col_array]
    • take. 함수, bracket index와 같은 효과
      • value_array.take(index_array)

numpy data I/O

  • np.loadtxt(filepath + 파일명.txt) #txt 파일 호출
  • np.savetxt(filepath + 파일명.csv, 저장할 array, delimiter = ",") #txt 파일 호출
  • text type의 데이터를 읽고, 저장하는 기능
profile
DL, NLP Engineer to be....

0개의 댓글

관련 채용 정보