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**22.88 µs ± 102 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
numpy모듈은 일반적으로 np 로 이름짓는다
import numpy as np
np.array()를 사용하여 배열을 생성할 수 있다.
arr = np.array([1, 2, 3]) print(arr)[1, 2, 3]
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]]
기본적으로는 같은 타입의 데이타에 대해서만 연산이 가능하지만, 피연산자가 연산 가능하도록 변환이 가능하다면 변환하여 연산을 가능하게 해준다.
[[1, 2, 3], [4, 5, 6]] + [1, 2, 3] => [[1, 2, 3], [4, 5, 6]] + [[1, 2, 3], [1, 2, 3]]
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)와 이에 대응