전체 글
-
defaultdict()언어/파이썬 2020. 12. 28. 06:16
Leetcode에서 most_common_word 의 문제에서 key를 단어로 하고 value를 단어가 나온 횟수로 할 때 defaultdict를 사용해서 어떤 기능때문에 이 defaultdict를 사용하는지 알아고자 했다. defaultdict는 key값을 넣어주지 않아도 자동으로 처음 매개변수로 넣어준 자료형으로 초기화가 된다. 만약 아무것도 넣어주지 않으면 None 형태로 초기화가 된다. 또한 아무것도 자료형으로 넣어주지 않고 그냥 key값만 넣어주면 오류가 난다. 하지만 예를들어 위와 같이 int형을 자료형으로 넣어주고 그냥 key값만 넣어주면 자동으로 key 값이 해당 자료형으로 초기화가 된다. Int형 같은 경우는 0으로, str은 ''으로 초기화가 된다. List는 [], set은 () 으로..
-
Beam Search머신러닝 및 딥러닝 2020. 12. 22. 23:31
NLP(자연어처리)에서 많이 사용되는 Beam Search에 대해서 알아보고자 한다. 나는 이번 논문 주제인 챗봇에 대한 모델을 만들때 해당 알고리즘을 사용했다. 마침 이번학기 때 (3-2학기) 알고리즘 수업을 들었는데 Greedy search 그리고 DFS 와 비슷한 느낌을 받았다. Beam Search 어떻게 생겼고 어떠한 이유때문에 NLP에서 사용되는지 알아보자 main.py 로 인하여 prediction은 2차원 리스트가 만들어 진다. 즉, 형태가 [[10개의 랜덤숫자], [10개의 랜덤숫자], [10개의 랜덤숫자], [10개의 랜덤숫자]] 으로 만들어진다. 여기서 beam_search를 호출한다. beam_size(여기서는 k에 해당한다)는 5로 놓았다. 차근차근히 봐보자. 원래 남의 코드 보는..
-
pdb언어/파이썬 2020. 12. 22. 23:03
pdb에 대해서 알아보자 pdb란 파이썬 디버깅 모듈로서 디버깅을 하는데 여러가지 장점이 많다. 여러가지 기능중 이번 포스팅에서 중점적으로 살펴볼 것은 pdb.set_trace() 기능이다. 해당 기능은 pdb.set_trace()를 호출한 지점 부터 여태까지 선언된 변수들도 볼 수 있는 기능들을 제공 해준다. 위처럼 pdb.set_trace()를 했던 코드 줄을 시작으로 predictions가 어떻게 이루어져 있나 pdb콘솔에 predictions를 검색해본 모습이다. pdb 콘솔창에 'l'을 치면 현재 내가 어디에있는지를 나타내주고 'n'을 치면 다음 라인으로 넘어간다. 더 좋은기능들은 docs.python.org/3/library/pdb.html 여기로 참고하면 좋다
-
참조와 사본의 차이 (S와 S[:] 의 차이)언어/파이썬 2020. 12. 22. 19:05
최근 알고리즘을 풀 때 여러 케이스에서 list를 다뤘는데 헷갈리는 경우가 많아 정리해둔다. 우선 해당 실험은 파이썬 3.8.3을 기준으로 진행했다. 위의 코드와 같이 케이스는 4개로 구분했다. 첫번째 케이스부터 한번 보자 cmp = full 이 경우는 cmp에 full의 값 뿐만 아니라 주소도 full의 주소와 동일해진다. 그래서 cmp의 값이 바뀌는 것 뿐만 아니라 full의 값도 같이 바뀌게 된다. full의 형태가 바뀌면 cmp도 full의 주소를 참조(refer)하고 있기때문에 값이 바뀌게 된다. cmp[:] = full 이제 2번 케이스의 경우 슬라이스([:])를 cmp의 앞에 해주었다. 이 경우는 값은 full과 동일하게 되지만 1번 케이스와 다르게 cmp의 주소는 연산전 cmp의 주소가 그..
-
leetcode_334(Reverse_String)알고리즘 2020. 12. 20. 13:39
해당 문제는 input으로 들어온 문제를 뒤집어서 풀이하는 형태이다. 예를 들어 "Happy" 가 들어왔을 경우 "yppaH"로 들어오면 된다. 여기서 주의사항은 공간복잡도가 O(1)이므로 새로운 변수를 추가하면 안된다는 것이다. 파이썬으로는 쉽게 풀이 할 수 있다. input 변수를 s 라고 가정할 때 s.reverse() 를 이용하면 쉽게 풀이할 수 있다. 또한 s[:] = s[::-1] 로도 쉽게 풀이할 수 있다. 하지만 s = s[::-1] 로는 풀이할 수 없다. 여기서 궁금한것은 s[:] 와 s의 차이는 무엇이길래 둘이 다른 결과가 나오는 것일까 일것이다. 이는 추후에 설명하도록 하겠다.
-
파이썬 정규식 표현 re언어/파이썬 2020. 12. 20. 00:00
leetCode 문제를 풀어보기 시작했다. 처음 시작한 문제에서 입력으로 받은 데이터는 대소문자를 구분하지는 않지만 숫자와 영어만으로 이루어져있어야 한다는 제약조건이 있었다. 이때 활용할 수 있는 것을 찾다가 정규표현식 re를 알게되었다. 메타문자 특수한 기능을 하는 문자로 import 등 파이썬의 예약어와 비슷한 역할을 맡는 문자열이라고 생가하면 된다. 파이썬 re 모듈의 메타문자는 총 12개로 다음과 같다 $ () * + . ? [ \ ^ { \ } ] 메타문자는 각각의 문자 하나에 매칭되지 않는다. 예를들어 일반 문자인 a 는 문자 'a'와 매칭되지만, 소괄호 (는 (와 매칭되지 않는다. 그럼 ( 를 어떻게 판별 할 수 있을까? 메타문장 앞에 백슬래시 \ 를 붙여주면 일반문자처럼 한문자에 매칭된다...
-
Insertion sort알고리즘 2020. 12. 8. 16:29
Insertion Sort shell sort의 Base가 되는 sort는 insertion sort 라고 할 수 있다. 또한 Insertion sort의 시간 복잡도는 O(N^2)이지만 selection sort와 bubble sort 보다 실제 sort를 돌려보면 위의 둘보다는 빠른 속도에 sort 가 되는 것을 알 수 있다. 위의 그림과 같이 insertion sort는 시작인 index가 0인 원소는 이미 정렬되어 있다고 생각한다. 그다음 첫번째 부터 그 이전의 원소와 비교하면서 만약 자신보다 앞에 있는 원소가 크면 옮긴다. 그렇지 않으면 그대로 위치한다. Second Pass를 보게 되면 1이 23보다 작기 때문에 앞으로 옮겨진것을 볼 수 있다. Third pass를 보면 10은 23보다 작기 ..