logo

code summary 📂프로그래밍

code summary

matplotlib

이미지 사이즈

  • 설정한 사이즈로 피규어 만드는 법: plt.figure(figsize=(w,h))

  • 기본 사이즈: plt.figure(figsize=(6.4,4.8))

  • 기본 plot 사이즈 조절:

    import matplotlib
    plt.rcParams['figure.figsize'] = [width, height]
    

tmux

  • tmux attach -t 0: 0번 세션에 연결
  • Ctrl + b + 방향키: 해당 방향의 세션으로 전환
  • Ctrl + b + 숫자: 해당 번호의 세션으로 전환
  • Ctrl + b + d : (세션 살려둔 채) 일반쉘으로 나가기.
  • Ctrl + c + Ctrl + c : emacs 종료

Python

실행 파일의 경로 os.getcwd()

  • main.__file__: 파일 이름과 확장자를 포함한 경로는 얻는다.

  • os.path.dirname(os.path.realpath(__file__)): 파일이 포함된 폴더의 경로를 얻는다. 터미널에서 파이썬 파일 실행시킬 때도 의도한 대로 기능하게 하려면 이걸 써야함.

  • os.getcwd(): 현재 작업 경로를 얻는다. 탐색기에서 *.py파일을 실행할 땐 의도대로 작동하지만, 터미널에서 실행시키면 터미널 경로를 얻음.

>>> import os
>>> import __main__ as main

>>> x = main.__file__
>>> print(x, "\n")
C:/Users/admin/Desktop/Python/test.py

>>> y = os.path.dirname(os.path.realpath(__file__))
>>> print(y, "\n")
C:/Users/admin/Desktop/Python

>>> z = os.getcwd()
>>> print(z)
C:/Users/admin/Desktop/Python

경로가 존재하는지 확인 os.path.exists(directory)

  • os.path.exists(directory): 경로가 존재하는지에 따라 True 혹은 Flase를 반환한다.

폴더 생성 os.makedirs(directory)

  • os.makedirs(directory): 입력한 경로가 없으면 폴더를 만드는 코드.
    def create_directory(directory):
        try:
            if not os.path.exists(directory):
                os.makedirs(directory)
        except OSError:
            print("Error: Failed to create the directory.")
    

폴더 삭제

하위 폴더 탐색하면서 빈 폴더면 삭제하는 코드.

import os

directory = os.path.dirname(os.path.realpath(__file__))

for (path, dir, files) in os.walk(directory):
    try:
        os.removedirs(str(path))
    except:
        print("디렉토리가 비어있지 않습니다.")

실행 파일의 하위 경로의 특정 파일 모두 찾기

실행 파일이 위치한 폴더를 포함한 하위 경로의 파이썬 파일*.py을 모두 찾는 코드이다. 실행 파일이 위치한 폴더도 탐색 범위에 포함되므로 실행 파일 자체도 file_list에 포함된다.

directory = os.getcwd()
file_list = []

for (path, dir, files) in os.walk(directory):
    for filename in files:
        ext = os.path.splitext(filename)[-1]
        if ext == '.py':
            file_list.append("%s\\%s" % (path, filename))

실행 변수 sys.argv

python 이후의 부분foosys.argv = foo.split()으로 받아오는 것.

# 파일 실행
import os 

os.system("python " + "file_directory/foo.py " + argv1 + " " + argv2)

## foo.py 내부 코드
import sys

# sys.argv[0]는 "file_directory/foo.py "임
variable1 = sys.argv[1]
variable2 = sys.argv[2]

파일 읽고 쓰기

읽기와 쓰기를 따로 해아한다. 뒤에 “t"를 붙이면 text, “b"를 붙이면 binary 모드

  • “rt"는 read text 모드, 읽기 전용, 파일 없으면 에러
  • “w"는 write 모드, 파일이 있든 없든 새로 만든다.
  • “a"는 append 모드, 파일이 없으면 새로 만들고, 있으면 기존 파일의 마지막에 내용 추가.
  • “x"는 create 모드, 이미 파일이 있으면 에러.
# 텍스트 파일 열고 내용 가져오기, 그리고 닫기
foo_read = open(file_directory + "foo.txt", "rt", encoding="utf-8")
lines = foo_read.readlines()
foo_read.close()

readlines()는 txt 파일의 각 줄을 리스트의 성분(문자열)으로 받아온다. 줄바꿈이 있으면 마지막에 '\n'도 포함됨. .strip()으로 마지막의 '\n'를 지울 수 있다.

foo_write = open(file_directory + "foo.txt", "wt", encoding="utf-8")

foo_write.write("bar\n") # 한 줄 쓰기

lines = ["bar1\n", "bar2\n", "bar3\n"]
foo_write.lines(lines) # 여러 줄 쓰기
foo_write.close()

문자열

  • strip(): 앞과 뒤에서 문자열 지움. 변수 없으면 (줄바꿈 등을 포함한) 공백을 지움. 따라서 문자열의 시작과 끝의 공백을 지울 때 유용함.
  • sort(): 알파벳 순서로 문자열 정렬. 역순정렬은 reverse=True
  • replace(): 문자열 대체
  • translate(): 문자 대체

    replace와 translate의 차이1

    replace(‘바꿀문자열’, ‘새문자열’) 은 문자열 안의 문자열을 다른 문자열로 바꿉니다(문자열 자체는 변경하지 않으며 바뀐 결과를 반환합니다). 다음은 문자열 ‘Hello, world!‘에서 ‘world’를 ‘Python’으로 바꾼 뒤 결과를 반환합니다. replace는 문자열을 바꿨는데 문자를 바꾸는 방법도 있겠죠? translate는 문자열 안의 문자를 다른 문자로 바꿉니다. 먼저 str.maketrans(‘바꿀문자’, ‘새문자’) 로 변환 테이블을 만듭니다. 그다음에 translate(테이블) 을 사용하면 문자를 바꾼 뒤 결과를 반환합니다. 다음은 문자열 'apple'에서 a를 1, e를 2, i를 3, o를 4, u를 5로 바꿉니다.

    >>> table = str.maketrans('aeiou', '12345')
    >>> 'apple'.translate(table)
    '1ppl2'
    
  • split(): 입력변수를 기준으로 문자열 쪼개서 리스트로 반환
    >>> x.split(',')
    ['1', '3', '4']
    

정리 잘된 사이트

리스트

  • .sorted() : 알파벳 순서로 문자열 정렬. 역순 정렬은 reverse=True

  • 리스트 저장하고 불러오기

import pickle

list = [1, 2, 3, 4]

# 리스트 저장
with open("list.pkl", "wb") as f:
    pickle.dump(list, f)

# 리스트 불러오기
with open("list.pkl", "rb") as f:
    list = pickle.load(f)

Julia

$\LaTeX$

문자 크기

$\Huge AB$ \Huge AB

$\huge AB$ \huge AB

$\LARGE AB$ \LARGE AB

$\Large AB$ \Large AB

$\large AB$ \large AB

$\normalsize AB$ \normalsize AB

$\small AB$ \small AB

$\footnotesize AB$ \footnotesize AB

$\scriptsize AB$ \scriptsize AB

$\tiny AB$ \tiny AB

PyTorch and TensorFlow

GPU

GPU확인

  • P: torch.cuda.is_available()

배열

상수

  • P: torch.tensor([1,2,3])
  • TF: tf.constant([1,2,3])

파라매터

  • P: torch.tensor([1,2,3], requires_grad=True)
  • TF: tf.variable([1,2,3])

모델

클래스

  • P: class model(nn.Module)
  • TF: class model(tf.keras.Model)

TF: model.complie()

TF: model.fit(data, label, epochs, batch_size, verbose)

  • verbose: Integer. 0, 1, or 2. (훈련 결과 출력 방식)
    • 0 = silent,
    • 1 = progress bar,
    • 2 = one line per epoch.

TF: model.complie()

VS Code

MarkdownAllinOne

마크다운 표 자동 formatting하는 기능 Shift + Alt + F

  • 파일 열 때 폴더 안펼쳐지게하기: Explorer: Auto Reveal

자동 줄바꿈 옵션

코드 자동 줄바꿈: Editor: Word Wrap

  • Ctrl + Shift + P $\to$ word wrap 검색 후 활성화
  • 토글키는 Alt + z

탭 표시줄 자동 줄바꿈: Editor: Wrap Tabs

단축키 설정: keybindings.json

  • 경로: C:/Users/user/AppData/Roaming/Code/User/keybindings.json

  • 마크다운 환경에서 윗첨자 자동 괄호:

    {
      "key": "shift+6",
      "command": "editor.action.insertSnippet",
      "when": "editorTextFocus && editorLangId == 'markdown'",
      "args": {
        "snippet": "^{$0\\}"
      }
    }
    
    • 텍 파일일 때 적용시키려면 editorLangId == 'latex'