아니 이게 변명이 아니라 병원만 다녀오면 체력이 부족해서 TIL 작성이 자꾸 늦어지자나...
난 numpy가 싫어
오늘 배운거
1. Numpy와 array
2. Numpy의 연산
3. Numpy와 선형대수
기본적으로 python
에는 list
라는 것이 있다. 다른 언어들보다 활용하기좋아서 많이들 사용하지만 치명적인 단점인 '속도'가 있다. 그래서 이 점을 보완하려면 numpy 모듈의 array
을 사용하면 좋다!
pip install numpy
를 cli 환경에서 입력해서 numpy 모듈을 설치 완료 해줘야 사용 가능하다!import numpy as np
-> 여기서 as 뒤에 오는 단어는, 우리가 코드를 짤 때 계속 numpy...numpy를 하나하나 입력하기 귀찮으니 별칭을 만들어서 사용한다고 보면 된다!Jupyter Notebook의 특수한 방식
- 코드 앞에
%timeit
을 사용하면 해당 코드가 어느정도의 시간을 사용하는 지 알 수 있다.
python
list와numpy
array는 10^3 이상의 차이가 난다.
numpy
로 array 만들기[]
형태로 넘겨주어야한다. 1차원, 2차원 등등 n차원으로 입력 가능하다. array.shape
(n, )
형식으로 나온다.(n,m)
형식으로 출력된다. n*m matrix인 것을 알 수 있다. Vector
와 Scalar
의 연산 x = np.array([1,3,5])
s = 9
print(x + s)
print(x - s)
print(x * s)
print(x / s)
[ 6 8 10]
[-4 -2 0]
[ 5 15 25]
[0.2 0.6 1. ]
Vector
와 Vector
의 연산y = np.array([1,2,3])
z = np.array([4,5,6])
print(x + s)
print(x - s)
print(x * s)
print(x / s)
[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4 0.5 ]
이 방식은 기존의 python
의 list
에서 인덱스를 사용해서 원소를 찾아내거나, slicing을 하는 방식과 거의 유사하다.
arr = np.array([1,2,3],[4,5,6],[7,8,9])
arr[1,2]
arr[1][2]
5
5
[n,m]
의 형식이나 [n][m]
의 형식을 사용하면 원하는 인덱스의 원소를 가져올 수 있다.arr = np.array([1,2,3],[4,5,6],[7,8,9])
arr[0:2,1:3]
arr[0:2][1:3] --> 이 방식은 위의 방식과 결과가 다르다...! 위의 방식만 사용하는 걸로 하자
같은 type의 data(array와 array끼리)에 대해서 연산이 가능하다.
x = np.array([0,1,0]) # 이럴 때, 전치를 하고 싶다면,
x = x[:, None] # 이런 방법으로 전치해서 사용해준다.
나머지 연산은 앞에서 이야기한 것과 같다.
np.zeros(dim)
을 사용한다. dim은 상수이거나 튜플의 형태이다.0
인 행렬np.ones(dim)
을 사용한다. dim은 상수이거나 튜플의 형태이다.1
인 행렬 np.diag((main_diagonals))
을 사용한다. main_diagonals은 상수이거나 튜플의 형태이다.np.diag((1,2,3))
>> array([[1, 0, 0],
[0, 2, 0],
[0, 0, 3])
np.eye(n, (dtype=int, uint, float, complex, ...))
를 사용한다. dtype의 디폴트는 float이며 n은 차원을 뜻한다.@
나 .dot()
을 사용한다.a = np.array([[0,1],[2,3]])
b = np.array([[4,5],[6,7]])
print(a.dot(b))
print(a @ b)
.trace()
로 구한다.np.linalg.det()
로 계산한다.np.linalg.det()
했을 때 값이 0이면, singaular matrix이다. np.linalg.inv()
로 구할 수 있다.np.linalg.eig()
으로 계산한다.사실 고등학교 과정에서 행렬
이 빠지면서 학교에서 선형대수
배울 때 조금 힘들었던 기억이 난다. 지금도 행렬을 다시 공부해야겠다는 생각이 들고 아직도 행렬 관련 연산이 바로바로 이뤄지지 않아서 부족함을 많이 느끼고 있당...