본문 바로가기

부스트캠프 AI Tech/[Week1] Python

[Week1] Python - numpy

*numpy

  • Numerical Python
  • 파이썬의 고성능 과학 계산용 패키지
  • Matrix와 Vector와 같은 Array 연산의 사실상의 표준
  • 한글로 넘파이로 주로 통칭

 

*numpy 특징

  • 일반 List에 비해 빠르고, 메모리 효율적
  • 반복문 없이 데이터 배열에 대한 처리 지원
  • 선형대수와 관련된 다양한 기능 제공 ex) dot  , norm 등
  • 굉장히 큰 Matrix에 리스트보다 메모리의 효율성 높음

*ndarray 특징

  • 하나의 데이터 type만 배열에 넣을 수 있음
  • List와 가장 큰 차이점 -> dynamic typing not supported
  • C의 Array를 사용하여 배열 생성
  • List와 메모리 저장 방법이 다름

 

*reshape

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

*flatten

  • 다차원 array를 1차원 array로 변환 

 

 

*indexing & slicing

  • indexing : list와 달리 2차원 배열에서 [0,0] 표기법 제공
  • slicing : list와 달리 행과 열부분을 나눠서 slicing이 가능 => matrix의 부분 집합 추출 용이

 

*identity & eye &diag

  • identity : 단위 행렬을 생성함
  • eye : 대각선이 1인 행렬, k값의 시작 index의 변경 가능
  • diag : 대각 행렬의 값 추출

 

*random sampling

  • 데이터 분포에 따른 sampling으로 array생성
  • ex) np.random.uniform(0, 1, 10).reshape(2,5) => 균등분포 2x5 matrix 생성
  • ex) np.random.normal(0, 1, 10).reshape(2,5)  => 정규분포 2x5 matrix 생성

 

*axis

  • sum, mean , std , var 등 operation function을 실행할때 기준이 되는 dimension 축
  • dimension이 증가하면 새로운 dimension이 axis=0 이 되고, 기존 랭크는 하나씩 증가

*operation

  • exponential : exp, expml, exp2, log , log10, log1p, log2, power, sqrt
  • trigonometric : sin, cos, tan, acsin, arccos, atctan
  • hyperbolic: sinh, cosh, tanh, acsinh, arccosh, atctanh
  • sum , multiply(element-wise), divide, dot product, transpose

 

*concatenate

  • vstack : numpy array를 수직으로 합치는(붙이는) 함수  ex) np.vstack((a,b))  =  np.concatenate((a,b) , axis=0)
  • hstack : numpy array를 수평으로 합치는(붙이는) 함수  ex) np.hstack((a,b))  =  np.concatenate((a,b) , axis=1)

 

*broadcasting

  • Shape이 다른 배열 간 연산을 지원하는 기능
  • Scalar - vector 외에도 vector - matrix 간의 연산도 지원

*All & Any

  • Array의 데이터 전부(and) 또는 일부(or)가 조건에 만족 여부 반환
  • Any : condition이 하나라도 True면 True 반환
  • All : condition에 해당하는 배열에 True or False 반환
  • numpy 배열 크기가 동일한 배열 비교도 가능(element-wise)

*np.where

  • ex1) np.where(a>0, 3, 2)  #where(condition, TRUE , FALSE)  => array([3, 3, 2])
  • ex2) a = np.arrange(10)  np.where(a>5)  =>  (array([6, 7, 8, 9]), )  #True인 index 반환
  • np.isnan(Not a Number) , np.isfinite(is finite number) 등 도 있음

*argmax & argmin

  • array내 최대값 또는 최소값의 index를 반환
  • ex1) a = np.array([1,2,4,5,8,78,23,3])   np.argmax(a) , np.argmin(a)  =>  (5, 0)
  • axis 기반의 반환
  • ex2) a = np.array([[1,2,4,7,[9,88,6,45],[9,76,3,4]])   np.argmax(a, axis=1) , np.argmin(a, axis=0) 
  •          =>  (array([3, 1, 1]) , array([0, 0 ,2 ,2]))
  • ex3) a.argsort() => 작은순으로 인덱스반환

*boolean index

  • 특정 조건에 따른 값을 배열 형태로 추출
  • ex1) test_array = np.array([1, 4, 0 ,2 ,3, 8, 9, 7], float)  
  •       test_array[test_array>3]    =>  array([4.,  8.,  9.,  7.])  #조건이 True인 index의 element만 추출

*fancy index

  • numpy는 array를 index value로 사용해서 값 추출
  • ex1)  a = np.array([2, 4, 6, 8], float)
  •        b = np.array([0, 0, 1, 3, 2, 1], int)  #반드시 integer로 선언
  •        a[b]   #bracket index, b 배열의 값을 index로 하여 a의 값들 추출
  •        => array([ 2.,  2.,  4.,  8.,  6.,  4.]) 
  • ex2)  a.take(b)    #위와 같음
  •        => array([ 2.,  2.,  4.,  8.,  6.,  4.]) 
  • ※주의 : index를 벗어나면 안됨!

*loadtxt & savetxt

  • text type의 데이터를 읽고, 저장하는 기능
  • ex1) loadtxt : a = np.loadtxt("./populations.txt")
  • ex2) savetxt : np.savetxt('int_data.csv' , a_int, delimiter",")   # int_data.csv로 저장

 

*Numpy performance

  • 일반적인 속도 :  for lopp < list comprehension < numpy
  • 100,000,000 번 loop이 돌 때, 약 4배 이상의 성능 차이를 보임
  • Numpy는 C로 구현되어 있어, 성능을 확보하는 대신 파이썬의 가장 큰 특징인 dynamic typing을 포기
  • 대용량 계산에서 가장 흔히 사용
  • Concatenate 처럼 계산이 아닌, 할당에서는 연산 속도의 이점이 없음

'부스트캠프 AI Tech > [Week1] Python' 카테고리의 다른 글

[Week1] Python - pandas  (0) 2021.08.06
[Week1] Python - pythonic code  (0) 2021.08.04
[Week1] Python - Data Structure  (0) 2021.08.04