git init : 현재 작업중인 디렉토리를 git 저장소로 지정
git status : 파일의 상태가 unstaged staged commited 중 어떤 상태에 있는 지를 알게 해줌
git add <추가할 파일> : 파일을 staged상태로 바꾸어줌 git add --all을 추천
git commit -m "파일의 이름.py" : 커밋 메시지를 통해 commit 생성(로컬저장소에)
git log : 현재 작업중인(HEAD->)branch를 기준으로 commit을 확인
git branch -v : 현재 branch의 흐름을 알 수 있음
git branch (name) : 새로운 branch를 생성
git checkout <branch_name> : 현재 작업중인 branch를 전환
git merge <branch_name> : 현재 작업중인(HEAD->) branch를 원하는 branch에 병합한다.(branch는 새로운 흐름을 만들어내는 것이기 때문에 merge 작업은 현재의 작업이 새로운 흐름을 따라가게fast forward 하는 작업이다.)
git branch -d <branch_name> : branch를 최신으로 병합했고 새로운 branch를 더이상 사용할 일이 없을때 그 branch를 삭제해주는 작업
git branch -M (name) : 현재 branch의 이름을 바꿔줌
git remote rm origin : origin url을 삭제
git push -u origin +clay-workspace : 강제로 push 할때 사용
git merge branch 'teo-workspace' of https://github.com/jdasam/irish-maler into dasol-workspace : 다른 branch를 내 branch에 가져오고 싶을때, 반드시 백업을 하고 사용할 것
(clay-workspace)git pull origin master : branch를 밀어버리고 다른 브랜치로 바꿔버리고 싶을때 사용
벡터의 각 원소에 대해서 연산을 진행
x = np.array([1,2,3])
c = 5
x + c -> [6 7 8]
x - c -> [-4 -3 -2]
x * c -> [5 10 15]
x / c -> [0.2 0.4 0.6]
벡터와 같은 인덱스끼리 연산이 진행
y = np.array([1, 3, 5])
z = np.array([2, 9, 20])
y + z -> [3 12 25]
y - z -> [-1 -6 -20]
y * z -> [2 27 100]
y / z -> [0.5 0.333333 0.25]
indexing은 python의 list와 유사하게 진행
slicing의 경우는 ,로서 차원을 구분해주면 된다.
import numpy as np
#1부터 12의 원소를 3행 4열로 가지는 배열 w를 생성
#array([[ 1, 2, 3, 4],
# [ 5, 6, 7, 8],
# [ 9, 10, 11, 12]])
w = np.arange(1,13).reshape(3,4)
w[0, 0] -> 1
w[0:2, 1:3] -> array([[2, 3],[6, 7]])
w[0:2, :] -> array([[1, 2, 3, 4], [5, 6, 7, 8]])
w[:,2:4] -> array([[ 3, 4], [ 7, 8], [11, 12]])
elementwise의 연산으로서 변환을 통해 연산을 하는 경우이다.
Numpy가 연산을 진행하는 특수한 방법이다.
1. M x N, 열벡터M x 1 사이의 연산
2. M x N, 행벡터N x 1 사이의 연산(여기서의 곱은 행렬곱@이아니고 *곱이다.)
3. 열벡터M x 1, 행벡터1 X N 사이의 연산
#전치의 테크닉
x = x[:, None]
np.zeros(dimension) : dimension은 하나의 값이거나 튜플( , )이다.
np.ones(dimension) : dimension은 하나의 값이거나 튜플( , )이다.
np.diag(main_diagonal) : main_diagonal은 튜플로서 전달한다.
np.diag((2,4)) -> array([[2, 0],
[0, 4]])
np.diag((1,3,5)) -> array([[1, 0, 0],
[0, 3, 0],
[0, 0, 5]])
np.eye(dim, dtype=) : dim에 크기, dtype에 int나 float 같은 타입을 넣어준다.
np.eye(3, dtype = float) -> array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
np.dot() 혹은 @을 사용한다.
mat_1 = np.array([[1,4],[2,3]])
mat_2 = np.array([[7,9],[0,6]])
mat_1.dot(mat_2)
mat_1 @ mat_2
main diagonal의 합
np.trace()를 사용한다.
arr = np.array([[1,4],[2,3]])
arr.trace() -> 4
np.eye(2, dtype=int).trace() -> 2
행렬을 대표하는 값들 중 하나
np.linalg.det()를 사용한다.
arr_2 = np.array([[2,3],[1,6]])
np.linalg.det(arr_2) -> 9.0000000000000002
행렬A에 대해서 AB = BA = I를 만족하는 행렬 B= A^-1
np.linalg.inv()를 사용한다.
mat = np.array([[1,4],[2,3]])
arr_inv = np.linalg.inv(mat)
정방행렬 A에 대해 Ax = lambdax를 만족하는 상수 lambda와 이에 대응하는 벡터
np.linalg.eig()를 사용한다.
mat = np.array([[2,0,-2],[1,1,-2],[0,0,1]])
np.linalg.eig(mat) ->
#고유값 1에 0,1,0
#고유값 2에 0.7,0.7,0
#고유값 1에 0.8,0,0.4가 대응된다.
(array([1., 2., 1.]),
array([[0. , 0.70710678, 0.89442719],
[1. , 0.70710678, 0. ],
[0. , 0. , 0.4472136 ]]))