Numpy 시작하기

손문기·2021년 7월 13일
0

왜 numpy를 사용해야 할까?

List 보다는 numpy의 array가 계산 속도가 훨씬 빠르기 때문이다.
%timeit을 통해 코드 실행 시간을 직접 비교해보자!

L = range(1000)
%timeit [i**2 for i in L]

307 µs ± 25.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

N = np.array(1000)
%timeit N**2

2.88 µs ± 102 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

numpy 모듈 불러오기

numpy모듈은 일반적으로 np 로 이름짓는다

import numpy as np

배열 생성하기

np.array()를 사용하여 배열을 생성할 수 있다.

arr = np.array([1, 2, 3])
print(arr) 

[1, 2, 3]

Array Indexing & Slicing

numpy의 array indexing과 Slicing 은 python의 리스트와 유사하게 진행된다

 W = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Indexing

W[1,2] 

6

Slicing

w[0:2, 1:3] 

[[2, 3], [5, 6]]

Arra Broadcasting

기본적으로는 같은 타입의 데이타에 대해서만 연산이 가능하지만, 피연산자가 연산 가능하도록 변환이 가능하다면 변환하여 연산을 가능하게 해준다.

[[1, 2, 3], [4, 5, 6]] + [1, 2, 3] => [[1, 2, 3], [4, 5, 6]] + [[1, 2, 3], [1, 2, 3]]

1. M by N, M by 1

2. M by N, 1 by N

3. M by 1, 1 by M

Numpy의 선형대수

np.zeros() : 영행렬
np.ones((a,b)) : 일행렬
np.diag((a, b, c)) : 대각행렬
np.eye(n, (dtype=?)): ?타입의 1인 대각행렬 = 항등행렬
np.dot() or @ : 행렬 곱 mat_1.dot(mat_2) or mat_1 @ mat_2
np.trace() : main diagonal(대각행렬)의 합
np.linalg.det() : 행렬을 대표하는 값들 중 하나 – 행렬식
np.linalg.inv() : 행렬 A에 대해 AB = BA =I를 만족하는 행렬 B = A^-1
np.linalg.eig() : 정방행렬 A에 대해 Ax=(\lambda)x를 만족하는 상수(\lambda)와 이에 대응

0개의 댓글