파이썬(Python)12 [자료구조] 연결 리스트(Linked List) 정리 1. 연결 리스트(Linked List)란?연결 리스트(Linked list)는 데이터를 저장하는 선형 자료구조로써, 각 구성 요소가 노드(Node)로 구성되어 있으며 하나의 노드(Node)에는 데이터가 저장된 부분과 다음 노드를 가리키는 포인터(Pointer)로 구성되어 있습니다.또한 연결 리스트의 시작지점을 가리키는 'Head'와 연결 리스트의 끝을 가리키는 Tail로 구성되어 있습니다.2. 연결 리스트(Linked list)의 종류연결 리스트의 종류는 크게 (1)Singly Linked List, (2)Doubly Linked List, (3)Circular Linked List가 있습니다. 이번 포스트에서는 Singly Linked List와 Doubly Linked List에 대해서만 다뤄보고.. 2024. 11. 10. [자료구조] 힙(Heap) 정리 1. 힙(Heap) 이란?Heap은 완전 이진트리의 한 종류로써, 우선순위 큐(Priority Queue)를 위해 고안된 자료 구조입니다. 특히, 다수의 자료에서 최소값과 최대값을 빠르게 찾을 수 있는 특징을 가지고 있습니다. 2. Heap의 종류최대 힙(Max Heap)최대 힙은 부모 노드의 값이 자식 노드 보다 크거나 같은 경우를 만족하는 완전 이진트리를 말합니다.(key(parents node) >= key(child node))부모 노드의 값이 항상 자식 노드보다 크거나 같기 때문에, root node는 항상 최대값을 가지게 된다.최소 힙(Min Heap)최소 힙은 부모 노드의 값이 자식 보드보다 작거나 같은 경우를 만족하는 완전 이진트리를 말합니다.(key(parents node) 부모 노드의.. 2024. 11. 8. [자료구조] 우선순위 큐(Priority Queue) 정리 1. 우선순위 큐(Priority Queue)란?우선순위 큐란, 큐(Queue)에 입력된 데이터를 우선순위에 따라 먼저 처리하고 싶은 경우에 사용합니다. 따라서 기존 FIFO(First In First Out)를 따르는 큐와는 다르게 순서와 상관 없이 우선순위가 높은 데이터가 먼저 나옵니다. 2. 우선순위 큐 구현방법우선순위 큐를 구현하는 방법은 크게 2가지가 있습니다. [1] 리스트(List)를 이용하여 구현하는 방법[2] 힙(Heap)을 이용하여 구현하는 방법2.1. 리스트를 이용하여 구현하는 방법리스트(List)를 이용하여 구현하게 되면 매우 간단히 구현할 수 있는 장점이 있습니다. 하지만, 리스트를 이용하여 구현하는 경우, 자료의 입출력의 속도는 선형적이므로(앞에서 부터 찾아가는 방법) 자료가 매.. 2024. 11. 7. Pandas에서 특정 행들의 열 값을 바꾸는 방법 Pandas에서 특정 조건을 만족하는 dataframe의 열 값을 바꾸고 싶거나 열을 추가하여 기록하고 싶은 경우가 존재한다.예를들어 다음과 같은 dataframe이 있다고 가정해봅시다만약 이러한 경우에 fruits에서 'apple' 이라는 값들의 price를 30000으로 바꾸고 싶다면 pandas에서 loc 함수를 이용하여 쉽게 바꿀 수 있습니다.df.loc[df['fruits'] == 'apple','price'] = 30000 loc 함수를 이용하여 특정 열을 가져온 다음에 특정 행을 뒤에 써주게 되면 해당 값들을 한번에 바꿀 수 있게 해줍니다. 위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다. 결과를 보면 fruits의 'apple' 들의 price가 모두 30000으로 적용된 모습.. 2024. 8. 9. [자료구조] 재귀(Recursion) 정리 1. 재귀(Recursion) 이란? 자료구조에서 재귀(recursion)는 함수의 실행 과정에서 자기 자신을 호출하는 함수를 의미합니다. Example : Factorial Function 재귀의 간단한 예시는 팩토리얼(Factorial) 함수를 예로 들 수 있습니다. 팩토리얼 함수를 수식으로 표현하면 다음과 같습니다. $$ f(n) = \begin{cases} 1 & n = 0 \newline n \cdot f(n-1) & else \end{cases} \quad where \ n \in \mathbb{Z}^+$$ 위 수식을 Python으로 구현하면 다음과 같이 구현해 볼 수 있습니다. 2. 재귀 함수 구현 시 주의사항 다음으로는 재귀함수를 작성할 때 반드시 포함되어야 하는 부분은 (1) Base c.. 2024. 2. 16. [Hugging Face🤗] Padding & Truncation 정리 보통 transformers에서 커스텀 LLM 모델을 만들 때, tokenizer도 미리 pretrained되어있는 모델을 주로 사용한다. 예를들어 RobertaTokenizer를 사용한다고 가정해보자. from transformers import RobertaTokenizer #tokenizer tokenizer = RobertaTokenizer.from_pretrained('roberta-base',sep_token = '') 보통은 텍스트 데이터를 모델에 입력할 때, 모든 텍스트의 길이를 통일시켜 주는 경우가 많다. 하지만 문장의 길이가 모두 다르기 때문에 통일을 시켜 주는데, 이때 해주는 작업이 padding 작업이다. Padding은 짧은 문장을 길게 늘일때 사용하는 기법으로, 예를들어 입력 문.. 2023. 6. 28. GPU 메모리 확보하기 모델을 돌릴 때 OutofMemory error가 발생하는 경우가 있다. 보통은 이런 경우에는 - 커널을 재시작하기(나도 모르게 모델이 여러개 올라가 있는 경우가 있다) - 사용하지 않는 변수를 제거하기 - Batch size를 줄여서 학습해보기 - 모델 자체의 네트워크 사이즈를 줄여보기 - inference 단계에서는 자동미분(torch.no_grad()) 사용하기 를 하는 경우가 일반적이지만, torch에서 캐쉬를 지워주는 함수도 사용해 볼 수 있다. 사용 방법은 torch.cuda.empty_cache()를 실행시켜 주면 된다. 2023. 6. 13. Selenium으로 웹사이트(디시인사이드) 크롤링하기 이번 포스트에서는 Selenium으로 국내 온라인 커뮤니티중 하나인 DC Inside(디시인사이드)를 크롤링하는 방법에 대해 정리하고자 합니다. 일반적으로 웹에서 데이터를 가져올 때 해당 사이트에서 제공하는 공식 API가 있으면 가장 좋지만, 그렇지 않은 경우에 request와 BeautifulSoup을 이용해서 크롤링을 진행할 수 있습니다. 하지만 request를 사용하는 경우 sleep()을 사용했음에도 불구하고 접속 차단을 하는 사이트가 존재합니다. 또한 크롤링 타깃 사이트가 동적페이지인 경우, request를 이용하여 동적 페이지를 크롤링 못하는 건 아니지만(예시 : 네이버 데이터랩 크롤링) 개인적으로 다른 사이트에 적용 해 보았을 때 잘 안 되는 경우가 있었습니다. 이러한 경우에는 request.. 2023. 4. 15. __call__ method의 사용법 __call__ method는 파이썬의 매직 메소드(Magic method) 중 하나입니다. __call__ method는 클래스의 객체도 호출할 수 있도록 만들어주는 메소드 입니다. 예를 들어 다음과 같은 클래스를 만들었다고 가정해봅시다. class Cal: def __init__(self): self.message = "number : " print(self.message) def __call__(self,a): self.n1 = a return self.message + str(self.n1**2) 이 클래스의 message라는 변수는 문자열 'number : '로 초기화되며, 이후 해당 문자열을 출력합니다. __call__ 메소드는 a라는 숫자를 받으면 제곱을 하고 message변수와 합쳐져서 리.. 2023. 1. 5. 이전 1 2 다음