Numpy 알아보기

박병규·2021년 7월 14일
0

인공지능_부트캠프

목록 보기
3/17
post-thumbnail

Numpy란??

python이 행렬이나 다차원 배열들의 연산 처리 시간이 오래걸려 이를 쉽게 처리 할 수 있도록 지원해 주는 파이썬의 라이브러리이다! 연산을 할 때 보다 더 빠르게 처리해 준다는 장점이 있다. numpy를 쓰는 이유에 대해 알게되니까 왜 사람들이 많이 사용하는지 알 것 같다.

import numpy as np

연산속도 비교

numpy를 사용했을 때와 사용하지 않았을 때 연산속도가 진짜 차이나는지 한 번 비교해 봤다.

numpy를 사용하였을 때 대략 150배정도 빨랐다.

numpy.array

이것을 사용하는 법은 어렵지 않다. 괄호와 ,사용에 주의하여 사용하자
차원이 커질수록 괄호랑 ,을 정말 꼼곰히 확인해야 할 것 같다.
특히 ,랑 . 오타볼때 눈 빠질 것 같다.

arr_1d = np.array([1,2,3]) #1차원
arr_2d = np.array([[1,2,3],[4,5,6]]) #2차원

Array Broadcasting

broadcasting이란 원래는 같은 type인 data에 대해서만 연산이 가능하다. 하지만 피연산자를 연산이 가능하게 변환을 해버리면 연산이 가능해진다. 이를 broadcasting라 한다.

1. M by N, M by 1

2. M by N, 1 by N

3. M by 1, 1 by N

Numpy와 선형대수학

영벡터(행렬)

np.zeros(3)
np.zeros((4,4,4))

일벡터(일행렬)

np.ones(5)
np.ones((3,3,3))

대각행렬

쉽게 말해서 행렬의 대각선 빼고 다 0인 행렬이다 여기서 행렬의 대각선은 Main diagonal을 뜻한다.

np.diag((2,4))
np.diag((1,2,3))

항등행렬

Main diagonal이 1인 대각행렬
dtype의 default값은 float이다.

np.eye(n, (dtype = int, uint, float,complex....))

행렬곱

행렬간의 곱연산을 나타내준다. 행렬의 곱에는 조건이 있는데 ab, cd의 행렬이 있을 때 b=c이여야 두 행렬간의 곱이 가능하다. 행렬의 곱을 할때는 일반적인 곱셈과는 다르게 @이를 사용한다. 이 점이 좀 흥미로웠다.

np.dot()
mat1 @ mat2

트레이스

트레이스는 main diagonal의 합을 의미한다.

np.trace()


1,5,9를 합해서 15가 나온다.
np.eye()는 항등행렬이고 1,1을 더해 2가 출력된다

행렬식

행렬을 대표하는 값들 중 하나이다 행렬식은 선형변환을 하는 과정에서 Vector의 scalling의 척도가 된다.

np.linalg.det()

역행렬

역행렬은 A에 대해 AB = BA = 1을 만족하는 행렬 B = A^-1이며 역행렬의 존재 유무에 따라 singular, non-singular matrix인지 결정이 된다.

np.linalg.inv()

고유값과 고유벡터

정방행렬(nxn) A에 대해서 Ax=λxAx = \lambda x을 만족하는 λ\lambda 와 x를 각각 고유값과 고유벡터라 한다.

np.linalg.eig()


numpy와 numpy에 선형대수의 이론을 입혀봤는데 아직 교유값과 고유벡터에 대해서는 아직 완벽한 이해가 안된 것 같아서 조금 더 공부를 해봐야겠다. 1학년 때 배웠던 선형대수가 군대에 다녀오니 많이 흐릿흐릿 해진 것 같다. 이번 방학에 다시 한번 훑어 봐야겠다.

profile
computer science student

0개의 댓글