본문 바로가기

Study/Python27

Python에서 이미지 채널 BGR 에서 RGB로 변환하기 어느 날 사용할 예제 사진이 없어 전역 후 처음 먹었던 싸이 버거를 찍은 사진을 예제 사진으로 쓰기로 했었다. 평소보다도 더 환상적으로 맛있었던 그 싸이 버거를 추억하기 위해 cv2.imread()로 불러와 plt.imshow()를 이용하여 출력하였더니... 입맛을 떨어지게 하여 다이어트에 효과적이라는 파란색 음식 사진을 볼 수 있었다. 이 글에선 BGR 이미지를 RGB 이미지로 변경해 본다. import numpy as np import matplotlib.pyplot as plt import cv2 from pathlib import Path imgpath = Path('.') / 'img.jpg' img = cv2.imread(str(imgpath)) plt.imshow(img) 이미지를 불러오는 .. 2021. 7. 3.
numpy 배열의 생성과 조작 dnumpy 사용을 위하여 import를 해준다. import numpy as np numpy 배열 생성 np.array np.array 에 list를 넘겨주어 numpy 배열의 생성이 가능하다. np.array([1,3,5,7,9]) array([1, 3, 5, 7, 9]) np.ndarray ndarray에 원하는 shape로 생성이 가능하다. np.ndarray((3,4)) array([[6.95174279e-310, 7.89754161e-312, 7.89754160e-312, 4.94065646e-324], [8.32219288e-315, 0.00000000e+000, 0.00000000e+000, 7.41098469e-323], [4.00752607e+175, 6.89912841e-310, 0... 2021. 6. 22.
Python pathlib.Path로 경로관리하기 얼마전 노트북을 새로 구매하였다. 이전 노트북은 debian 운영체제를 사용하고 있었다. 그래서 개인적으로 간단하게 만드는 파이썬 프로그램들에는 별 생각 없이 슬래시(/)가 포함된 경로를 그대로 넣었었다. 이 프로그램들은 경로를 구분하는 데에 역슬래시를 사용하는 윈도우 프로그램에선 정상적으로 작동하지 않는다. os.path.join을 사용해서 처리하려다가 경로를 문자열이 아닌 객체로 처리하는 pathlib.Path에 대해 알게되었다. Path를 이용해서 경로를 처리하는 법 import from pathlib import Path Path 객체 생성 p = Path('.') p2 = Path('.','folder2') 시스템에 따라서 PosixPath, WindowsPath중 하나로 생성이 된다. 경로 연.. 2021. 6. 10.
Pytorch의 Reproducibility를 위한 설정들 같은 학습 데이터로 학습을 하고, 동일한 테스트 데이터로 테스트를 하였음에도 매번 실행해보면 모델의 학습 파라미터와 테스트 결과가 동일하지 않은 경우가 많다. 이는, 높은 수준의 재생산성(Reproducibility)을 요구하는 대회나 업무에 지장을 줄 수 있다. 이 글에선 Pytorch를 사용할 때 최대한 Reproducibility를 유지할 수 있는 방법에 대해 적어보았다. Seed 고정 난수 생성기의 seed를 고정하면, 매번 프로그램을 실행할 때마다 생성되는 난수들의 수열이 같게 할 수 있다. 그래서 pytorch와 관련 라이브러리에서 사용되는 난수 관련 seed를 고정하여야 한다. pytorch_lightning에선 pytorch와 관련된 난수 생성기의 seed를 고정하는 코드가 있다. 그 코드.. 2021. 6. 9.
Python multiprocessing.Pool 멀티프로세싱 2 Python에선 multiprocessing.Pool을 이용하여 멀티프로세싱을 할 수 있다. Process를 활용할 때는 우리가 직접 Process를 만들어서 그 Process위에서 작업을 돌렸다면, Pool은 지정된 개수만큼 프로세스를 미리 만들어 놓고, 그 프로세스들 위에서 작업을 돌리는 방식이다. Pool 사용하기 from multiprocessing import Pool if __name__ == '__main__': p = Pool(4) # do something here with Pool # blabla # blablabla p.close() # or p.terminate() p.join() 생성 처음 Pool을 생성할 때에 사용될 프로세스 수를 지정할 수 있다. 만약, 주어지지 않는다면 os.. 2021. 6. 7.
Python multiprocessing.Process 멀티프로세싱 1 파이썬에서 멀티프로세싱을 이용하여 여러 작업을 동시에 처리할 수 있다. multiprocessing의 Process를 사용하여 이를 간단히 구현할 수 있다. Process 사용 아래 코드는 Process를 사용하는 가장 간단한 방법이다. from multiprocessing import Process def func(string): print(string) if __name__ == "__main__": proc = Process(target=func,args=('process',)) proc.start() process Process의 서브클래스를 만들어 사용할 수도 있다. 이때, 반드시 run() 메서드를 오버 라이딩해주자. from multiprocessing import Process class .. 2021. 6. 3.
Python collections의 Counter로 개수 세기 Python의 리스트나 튜플 혹은 이외의 iterable 한 객체에서 안에 요소가 몇 개가 들어있는지 셈을 하고 싶을 때가 있다. 구현이 오래 걸리는 작업은 아니지만, 구현하기 귀찮거나 시간이 없을 때 collections의 Counter를 사용해주면 좋다. 이 글은 Counter를 사용하는 방법에 대한 내용을 담고 있다. Counter import Counter를 사용해주기 위해 먼저 import를 하자. from collections import Counter 기본적인 Counter의 생성 및 사용 생성자에 아무 값도 넣어주지 않으면 빈 Counter가 생성된다. cnt = Counter() print(cnt) Counter() Counter를 사용하여 iterable 한 객체가 담고 있는 것들을 세.. 2021. 5. 27.
python에서 json 다루기 파이썬에서 json을 다루어 보자. 모듈을 사용하지 않는 방법도 있지만, 편하게 하기 위해 json모듈을 import 하여 사용하자. import json json모듈은 json형식의 문자열들을 파이썬 객체로 바꾸어주고, 그 반대로도 바꾸어준다. 그래서 어떤 파이썬 객체가 어떤 json의 어디에 해당하는지 파악하면 좀 더 편하게 다룰 수 있다. 아래는 그 표이다. Python Json None null dict Object list Array tuple Array int Number float Number str String True true False false 사실 이렇게 써놓아도 크게 외울 것은 없다. 숫자는 숫자고, 문자열은 문자열, True, False는 맨 앞 대문자만 다르다. json에서 p.. 2021. 5. 24.
python의 with 구문 (context manager) 한번 보기 대부분의 경우 파이썬을 배우면서 with를 처음 접하는 때는 파일을 다룰 때이다. 어떤 파일을 다루고 나서는 close를 해주어야 프로그램이 정상 동작한다. 그러나 파일을 다루던 도중에 오류로 인해 예상치 않게 프로그램이 종료가 된 경우 close를 미처 해주지 못한 경우도 발생한다. try - finally 구문을 이용하면 실행 도중 오류가 발생하였을 때 close를 해 줄 수 있다. 그러나 with를 사용하면 우리가 직접 close를 해 줄 필요가 없다. 컨텍스트 매니저를 통해 자원의 할당과 반납을 필요할 때 해주기 때문이다. try finally vs with # Handling file with try - finally f = open('a.txt','w') try: f.write('hello w.. 2021. 5. 19.
Python에서 AhoCorasick(아호코라식) 알고리즘 구현하기 지금 캐글에 논문을 입력으로 받아 논문에서 사용된 데이터셋 이름을 찾는 대회가 진행 중이다. 만약 알고 있는 데이터셋 이름이 있다면, 논문 속에서 그 이름을 단순 문자열 매칭을 이용해서 찾아내어서 출력에 반영할 수 있을 것이다. 처음에는 Test 셋이 몇 개 없는 줄 착각하고 단순 2중 for문으로 이를 구현했었다. 그러나 숨겨진 test 셋에 문서가 8000개가 넘어서 문자열 매칭만 하였음에도 50분이 넘게 걸렸었다. 그래서 이 부분을 다중 패턴 매칭 알고리즘인 아호코라식을 사용하여서 구현하였다. 아호코라식 알고리즘은 찾아야 하는 패턴이 많을 때 단순 2중 for문에 비해 큰 시간 차이를 보인다. 또, 검색해야 하는 범위가 방대할 때, 아호코라식으로는 커피 두 잔 정도 타는 시간에 끝낼 수 있을 것들이.. 2021. 4. 17.