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

Clay Ryu's sound lab·2021년 12월 21일
0

Note for 2021

목록 보기
11/33
post-custom-banner

git 명령어 정리

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를 밀어버리고 다른 브랜치로 바꿔버리고 싶을때 사용

git hub 사용법

  1. 원격 저장소repository를 생성 혹은 원격 저장소의 주소를 알아둘것(ex> https://github.com/jdasam/irish-maler.git)
  2. git init : 로컬 저장소와 원격 저장소를 연결
  3. git remote add <별칭, 보통은 origin> <원격저장소 주소> : 주소의 별칭을 지정하기
    git remote -v : 연결 상태를 확인
  4. 원격 저장소의 내용을 로컬 저장소로 가져옴
    git clone (주소) (폴더이름) : public인 repository를 나의 local 저장소로 가져옴(폴더이름 생략시 현재 폴더에 저장)
  5. vscode를 사용한다면 새 창을 열고 왼쪽 위 탐색기를 누르고 clone에 github 주소를 입력하면 된다. 그러면 위의 과정 들을 모두 알아서 해준다.
  6. git branch clay-workspace: 해당 repository는 다양한 branch로 이루어져있기 때문에 나의 작업을 따로 남길 새로운 branch를 만들어준다.
  7. 작업을 하고나서 add -> commit -> push의 순서로 내 작업물을 github에 업로드 한다.
  8. git push <remote_repo_name> <branch_name> : 어떤 원격 저장소에 어떤 branch를 전달, git push origin(원격저장소 이름) clay-workspace(넘겨줄branch), push는 commit 단위로 진행이 된다.
  9. github pull request(PR) : branch를 master에 넣고 싶을때 github 사이트에서 진행, 어지간히 잘 정리가 된게 아니라면 하지 않는다.
    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 ]]))
profile
chords & code // harmony with structure
post-custom-banner

0개의 댓글