프로그래머스 인공지능 데브코스 3기 수업내용 정리 #11(git사용법, Numpy 실습2)

git 명령어 정리

git init : 현재 작업중인 디렉토리를 git 저장소로 지정
git status : 파일의 상태가 unstaged staged commited 중 어떤 상태에 있는 지를 알게 해줌
git add <추가할 파일> : 파일을 staged상태로 바꾸어줌
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 hub 사용법

  1. 원격 저장소repository를 생성
  2. 로컬 저장소와 원격 저장소를 연결
    git remote add <별칭> <원격저장소 주소>
    git remote -v : 연결 상태를 확인
  3. 원격 저장소에 로컬 저장소의 작업을 전달
    git push <remote_repo_name> <branch_name> : 어떤 원격 저장소에 어떤 branch를 전달, git push origin(원격저장소 이름) main(넘겨줄branch), push는 commit 단위로 진행이 된다.
  4. 원격 저장소의 내용을 로컬 저장소로 가져옴
    git clone (주소) (폴더이름) : public인 repository를 나의 local 저장소로 가져옴(폴더이름 생략시 현재 폴더에 저장)
  5. 해당 repository는 다양한 branch로 이루어져있기 때문에 나의 작업을 따로 남길 새로운 branch를 만들어준다.
    git checkout month1
    git branch week3-1/류지우
    month1에 push를 위해서는 현재의 branch에서 commit을 해줘야한다.
    git log로 현재의 branch에서 commit을 확인하고
  6. git push origin (branch)으로 push를 해준다.
  7. github pull request(PR)
    compare(어떤 branch를) base(어디 branch로)

Numpy로 연산하기

벡터vector와 스칼라scalar의 연산

벡터의 각 원소에 대해서 연산을 진행

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]

벡터vector와 벡터vector 사이의 연산

벡터와 같은 인덱스끼리 연산이 진행

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]

Array의 indexing과 slicing

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]])

Array의 Broadcasing

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]

Linear Algebra with Numpy

자주 쓰이는 행렬

np.zeros(dimension) : dimension은 하나의 값이거나 튜플( , )이다.
np.ones(dimension) : dimension은 하나의 값이거나 튜플( , )이다.

대각행렬diagonal matrix

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]])
                            

항등행렬identity matrix

np.eye(dim, dtype=) : dim에 크기, dtype에 int나 float 같은 타입을 넣어준다.

np.eye(3, dtype = float) -> array([[1., 0., 0.],
       				   [0., 1., 0.],
       				   [0., 0., 1.]])

행렬곱dot product

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

트레이스trace

main diagonal의 합
np.trace()를 사용한다.

arr = np.array([[1,4],[2,3]])
arr.trace() -> 4
np.eye(2, dtype=int).trace() -> 2

행렬식determinant

행렬을 대표하는 값들 중 하나
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)

고유값eigenvalue과 고유벡터eigenvector

정방행렬 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 ]]))

좋은 웹페이지 즐겨찾기