파이썬 26

[Einops] 차원관리의 새로운 차원

Deeplearning code를 작성하다 보면 항상 tensor의 차원을 관리하는 것에서 어려움을 마주친다. 물론 Pytorch나 Numpy를 활용해서 차원을 관리할 수 있지만 문제는 `직관적`이지 않다는 것이다. 실제로 4차원 이상부터는 사람이 상상하기 힘들다.. 이렇게 어려운 차원관리를 효율적으로 할 수 있는 라이브러리가 있다. 바로 `Einops`이다. 이 라이브러리를 처음 발견한 코드는 ViT를 Pytorch로 구현한 코드였다 처음 이 코드를 보았을때, 기존 Python의 문법에서 본적이 없는 하이퍼 파라미터의 형태를 갖고 있어서 조금은 혼란스러웠다. out = torch.matmul(attn, v) out = rearrange(out, 'b h n d -> b n (h d)') return s..

GIL

요즘 프로그램을 코딩하면서 가장 먼저 우선시하려고 노력하는 부분이 내가 작성한 프로그램의 처리속도가 과연 효율적인지? 또는 더 빠른 방법으로 처리할 수는 없는지 이다. 이러한 고민을 하다보면 Multi - Processing or Multi-threading을 마주 칠수 밖에 없고 CS 지식이 부족하면 조금 이해하기 어렵기 때문에 추가적인 공부를 하고 있다 공부를 하다보면 파이썬은 GIL이 있다라는 말을 자주 마주치게 되었다 따라서 이번 시간에는 이러한 GIL에 대해서 정리하고 다양한 정리를 해보려고 한다 1. 그래서 GIL이 뭔데? 우선 GIL을 이해하기전에 Python의 인터프리터를 이해 해야한다. Python의 인터프리터란, 인터프리터 언어를 생각하면 쉽게 이해할 수 있는데 내가 작성한 파이썬 코드..

[Python] Typing 2편

참고한 자료 파이썬 Typing 파헤치기 - 심화편 지난 글 '파이썬 Typing 파헤치기 - 기초편'에서는 Typing의 기본적인 내용과 8개의 타입에 대해 다루어봤습니다. 이번 포스트에서는 조금 더 심화된 타입들에 대해 다뤄보도록 하겠습니다. 심화 타 sjquant.tistory.com 지난 글 [Python] Typing 1편 참고자료 파이썬 Typing 파헤치기 - 기초편 동적 언어에서의 타입 검사 파이썬은 동적 언어로 잘 알려진 언어입니다. 즉, 변수의 타입을 일일이 명시하지 않아도 되고, 특정 변수의 타입이 중간에 eumgill98.tistory.com 우리는 지난 시간에 Python의 Typing기능의 간단한 기초를 알아보았다 이번 시간에는 조금더 심화 과정의 Typing을 알아볼려고 한다 ..

[Python] Typing 1편

참고자료 파이썬 Typing 파헤치기 - 기초편 동적 언어에서의 타입 검사 파이썬은 동적 언어로 잘 알려진 언어입니다. 즉, 변수의 타입을 일일이 명시하지 않아도 되고, 특정 변수의 타입이 중간에 바뀌어도 됩니다. 파이썬과 같은 동적 언 sjquant.tistory.com 요즘 오픈 소스를 살펴보면서 공부하는 습관을 기르고 있다 오픈 소스를 살펴보면 Typing을 hint로 주는 경우가 있는 이부분은 처음 보고 어색한 부분이었기 때문에 추가적을 공부를 하였다 그럼 이제부터 공부한 내용을 기반으로 Python 의 Typing에 대해서 정리해보겠다 1. 동적언어의 Typing? Python은 많은 사람들이 알고 있들이 동적언어이다. 동적언어의 가장큰 장점은 굳이 변수의 타입을 일일이 명시할 필요가 없다는 것..

[백준] 1240번 노드사이의 거리 파이썬 풀이

1240번: 노드사이의 거리 N(2≤N≤1,000)개의 노드로 이루어진 트리가 주어지고 M(M≤1,000)개의 두 노드 쌍을 입력받을 때 두 노드 사이의 거리를 출력하라. www.acmicpc.net [문제] [코드] import sys from collections import deque input = sys.stdin.readline n, m = map(int, input().split()) tree = [[] for _ in range(n+1)] #indexing을 위해서 +1사이즈로 구성 #두노드 사이 거리를 구하는 bfs def bfs(a, b): q = deque() q.append((a, 0)) visited = [False] * (n+1) visited[a] = True while q: s..

[Python] Iterator vs. Generator

파이토치를 하다보면 특히, DataLoader 다루다보면 Generator 라는 것을 만나게 된다 처음 마주치면 어떠한 개념인지 살짝 애매할 수 있기 때문에 이번에 개념을 한번 글로 정리해보려고 한다 Iterator vs. Generator Iterator 먼저 Iterator를 알아보자 iterate는 반복하다라는 의미이다 파이썬의 경우 list, dict, 문자열이 iterable 객체이다. 이를 이해하기 쉽게 예를 들어서 설명하면 x = [1 , 2, 3] list인 경우 순차적으로 값을 뽑기 위해서 for문을 활용할 것이다 fro i in [1,2,3]: print(i) >>> 1 2 3 그렇다면 for문을 활용하지 않고 각 값을 순차적으로 뽑을 수 있는 방법은 없을까? 바로 iter()를 활용하..

[백준]9934번 완전 이진 트리 파이썬(Python) 풀이

9934번: 완전 이진 트리 상근이는 슬로베니아의 도시 Donji Andrijevci를 여행하고 있다. 이 도시의 도로는 깊이가 K인 완전 이진 트리를 이루고 있다. 깊이가 K인 완전 이진 트리는 총 2K-1개의 노드로 이루어져 있다. (아래 www.acmicpc.net [문제] [코드] #중위 순회 문제 #순서가 주어지고 트리를 유추하는 문제 import sys input = sys.stdin.readline k = int(input()) squence = list(map(int, input().split())) trees = [[] for _ in range(k)] #완전 이진 트리이니까 각 층의 노드는 중간의 값 def binary_tree(array, depth): mid_index = len(a..

[백준]1991번 트리 순회 풀이

1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net [문제] [코드] import sys input = sys.stdin.readline N = int(input().strip()) #Dic 활용 해서 노드 구성 Tree = {} for i in range(N): node, left, right = input().strip().split() Tree[node] = [left, right] #input값 출력 print(Tree) ##전위 중위 후위 함수로 구현 def preorder(node): #전위..

[네이버 부스트 캠프 AI Tech] 파이썬, Numpy, Pandas

본 글은 네이버 부스트 캠프 AI Tech 기간동안 개인적으로 배운 내용들을 주단위로 정리한 글입니다 본 글의 내용은 새롭게 알게 된 내용을 중심으로 정리하였고 복습 중요도를 선정해서 정리하였습니다 ✅ Week 1 목차 Lambda, map, reduce decorate logging Handling logging configparser, argparser 정규식 numpy shape handling pandas ✅lambda, map, reduce (복습 중요도 : ⭐⭐) ✔️lambda - 함수 이름 없이 - ex) def ~~~, 함수처럼 쓸 수 있는 익명 함수 #일반적으로 함수를 활용해서 뺄셈 기능을 구현한다고 한다면 def minus(x , y): return (x - y) #함수 사용 prin..