hojeomi blog

Day 6-1. numpy 본문

AI/Course

Day 6-1. numpy

호저미 2021. 1. 25. 16:55

1. 행렬과 매트릭스를 코드로 표현하기

  • Numerical python
  • 파이썬의 고성능 과학 계산용 패키지
  • Matrix와 Vector와 같은 Array 연산의 사실상의 표준
  • 일반 List에 비해 빠르고, 메모리 효율적
  • 반복문 없이 데이터 배열에 대한 처리를 지원함
  • 선형대수와 관련된 다양한 기능을 제공함

 

 

2. ndarray

str, float 타입으로 넣어도 한 가지 타입으로 지정됨

  • numpy는 np.array 함수를 활용해서 배열을 생성함 → ndarray
  • numpy는 하나의 데이터 타입만 배열에 넣을 수 있음
  • List와 가장 큰 차이점 → dynamic typting not supported

 

 

3. array creation

https://jakevdp.github.io/PythonDataScienceHandbook/02.01-understanding-data-types.html

  • array가 메모리 접근성이 더 좋음, array는 메모리의 크기도 일정함
  • 리스트는 값이 들어있는 주소를 가리킨다 → 적혀있는 주소로 타고 들어가야 값이 있다
  • array는 가리키는 주소에 바로 값이 있다

  • array는 메모리가 할당됨 → array(a)와 array(b)의 원소들은 다른 메모리값을 가지고 있기 때문에 같은 값이더라도(1==1) 메모리값은 다름 → False

 

 

4. array type

https://azanewta.tistory.com/3

  • float32: 32bits = 4bytes
  • float64: 64bits = 8bytes
  • int: 8bits = 1byte 

 

 

5. Handling shape

  • reshape: array의 shape의 크기를 변경함, element의 갯수는 동일
  • reshape(-1,2): -1을 입력해줌으로써 x*2=element 갯수가 되도록 x를 자동 조절
  • flatten: 벡터처럼 펼쳐줌
  • indexing & slicing: [i,j] 형식의 접근을 허용함, 리스트와 달리 행과 열 부분을 나눠 slicing이 가능함 → 매트릭스의 부분집합을 추출할 때 유용함

 

 

6. Creation function

  • arange
    • array의 범위를 지정하여 값의 list를 생성하는 명령어
    • np.arange(0,5,0.5): 0에서 5까지 0.5단위로 생성
  • ones, zeros, and empty
    • 1, 0, 또는 빈공간으로 채워진 array 생성
    • empty: shape만 주어지고 비어있는 ndarray 생성(memory intialization)이 되지 않음
  • something_like
    • 기존 ndarray의 shape 크기 만큼 1, 0 또는 empty array를 반환
    • something에는 ones, zeros, empty가 들어감
    • 예) ones_like(이미 생성되어 있던 array)
  • identity
    • 단위행렬을 생성함
  • eye
    • 대각선이 1인 행렬, k값의 시작 index의 변경이 가능
    • identity(단위행렬)과 다르게 nxm의 행렬을 생성할 수 있음

 

3열(인덱스 2)에서 시작함

  • diag
    • 대각 행렬의 값을 추출함
    • eye처럼 k를 이용하여 시작 인덱스를 설정할 수 있음
  • random sampling
    • 데이터 분포에 따른 sampling으로 array를 생성
    • 표준정규분포, 정규분포, 균등분포 등에 따른 랜덤값을 생성할 수 있음
    • 균등분포: np.random.uniform(0,1,10).reshape(2,5) → 시작값: 0, 끝값: 1, 갯수:10개
    • 모수 고려: np.random.exponential(scale=2, size=100)

https://codetorial.net/numpy/random.html

 

 

7. Operation functions

  • 알아야하는 개념
    • axis
      • 모든 operation function을 샐행할 때 기준이 되는 dimension 축
      • 3x4 행렬 → (3, 4) → 3: axis=0, 4: axis=1
  • sum
    • 새롭게 생성된 축이 axis=0이 됨

 

  • mean & std
  • mathmetical functions
    • np.exp()
    • np.sqrt()
  • concatenate
    • numpy array를 붙이는 함수
    • vstack: 행끼리 붙임 <=> np.concate((a,b), axis=0)
    • hstack: 열끼리 붙임 <=> np.concate((a,b), axis=1)
    • [참고] 차원 추가하는 방법: reshape, newaxis

 

 

8. array operations

  • operations between arrays: numpy는 array간의 기본적인 사칙 연산을 지원함
  • element-wise operations
    • array간 shape이 같을 때 일어나는 연산
    • 예) 3x4행렬 * 3x4행렬 → 같은 위치의 값끼리 곱하기 연산
  • dot product

  • transpose(or T attribute 사용)
  • broadcasting
    • shape이 다른 배열 간 연산을 지원하는 기능
    • scalar-matrix 외에도 vector-matrix 간의 연산도 가능
      • 예) 3x3행렬 * [1,2,3] → [1,2,3]을 [[1,2,3], [1,2,3], [1,2,3]]오로 broadcasting해서 연산

 

 

9. numpy performance

  • 일반적으로 속도는 아래순
    • for loop → list comprehension → numpy 순으로 빠름
  • 1억번의 loop이 돌 때, 약 4배 이상의 성능 차이
  • numpy는 C로 구현되어 있어, 성능을 확보하는 대신 파이썬의 가장 큰 특징인 dynamic typing을 포기함
  • concatenate처럼 계산이 아닌 할당에서는 연산 속도의 이점이 없음

 

 

10. comparisons

  • array 간의 비교
  • All & Any
  • logical_and, logical_not, logical_or

  • np.where: True/False에 따른 반환값 조절 및 조건을 만족하는 값의 인덱스 반환
    • 예) np.where(a>0, 3, 2) → a>0이면 3, 아니면 2 반환
    • np.isnan: nan인지 아닌지 반환
    • np.isfinite: finite한 수인지 아닌지 반환
  • armax & armin
    • array 내 최댓값 또는 최솟값의 인덱스 반환
    • axis 기반의 반환도 가능

 

 

11. boolean & fancy index

  • boolmean index
    • 특정 조건에 따른 을 배열 형태로 추출
    • comparison operation 함수들도 모두 사용가능
    • [참고] np.where는 만족하는 값의 '인덱스' 반환
  • fancy index
    • index value를 사용해서 값 추출
    • matrix 형태도 가능

[b, c]를 통해, [0,0], [0,1], [1,1], [1,1], [0,1] 값을 반환함

 

 

12. numpy data in & out

  • np.loadtxt()
  • np.astype(int): 정수형 변환
  • np.savetxt('.\파일이름.csv', 저장할 numpy, delimiter=",")

'AI > Course' 카테고리의 다른 글

Day 6-3. 행렬  (0) 2021.01.25
Day 6-2. 벡터  (0) 2021.01.25
Day 2-2. 파이썬 함수에서 call by object reference  (0) 2021.01.25
Day 5-1. File / Exception / Log Handling  (0) 2021.01.22
4-1. 파이썬 OOP(객체 지향 프로그래밍)  (1) 2021.01.22
Comments