본문 바로가기

분류 전체보기59

fork 사용하기 fork를 사용하여 새로운 프로세스를 만들 수 있다. fork() 시스템 콜에 대해 알아보자. fork fork를 사용하면 현재 프로세스와 거의 같은 프로세스를 하나 더 생성할 수 있다. 생성된 자식 프로세스의 메모리 영역은 parent process의 메모리 영역을 복사한 것이기 때문에 fork() 이전에 parent process에서 존재하던 어떤 변수를 fork() 이후 child process에서 값을 변화시킨다 하더라도 값이 변하지 않는다. 아래는 fork 시스템 콜에 대한 사용법이다. fork() 인자 : 없음 반환 값 0 : fork()가 성공하면 child process에 반환된다. pid 값 > 0 : fork()가 성공하면 parent process에 생성된 child process의 .. 2021. 10. 17.
sigprocmask을 사용하여 signal block 하기 리눅스에서는 프로세스에 Signal을 전달할 수 있다. 그리고 프로세스는 이 Signal에 의한 처리를 막기 위해 원하는 Signal을 Block 할 수 있다. 이를 가능하게 하는 것이 sigprocmask이다. sigset_t 우리는 원하는 Signal을 block 하기 위하여 특정 구조체를 사용하여야 한다. 그 구조체는 sigset_t이다. 사실 sigset_t의 구조는 그리 복잡하지 않다. 정수형 자료형의 배열이라고 생각해도 무관하다. 비트마스크를 사용하기 때문에 사용되는 Signal의 종류 수만큼의 비트 수가 필요하다. kill -l 명령어를 통해 어떤 signal이 몇번인지 볼 수 있다. $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRA.. 2021. 10. 16.
Merge Sort (합병 정렬) Merge Sort는 배열의 값을 정렬하는 여러 가지 방법 중에 하나이다. Merge Sort는 정렬이 된 부분 배열들을 합쳐가면서 정렬을 수행한다. 정렬이 된 배열들을 합친다는 것이 Merge Sort의 핵심 아이디어이다. 이 아이디어를 이용하여 어떻게 전체 배열에 대해 정렬을 수행할 수 있을까? Merge Sort (합병 정렬)로 배열을 정렬하는 방법에 대해 알아보자. 참고로 이 글에서는 오름차순으로 정렬할 것이다. Merge 정렬에 대해 생각하기 전에, 정렬이 된 두 배열을 합치는 작업에 대해 생각해보자. 함수 merge가 이 작업을 수행한다고 해보자. merge의 입력으로 들어오는 두 배열은 이미 정렬이 되어 있어야 하고 반환하는 결과물도 정렬이 되어 있어야 한다. 사실, 두 배열이 정렬이 되어있.. 2021. 9. 17.
컴퓨터와 가위바위보 하기 1 컴퓨터와 '가위 바위 보' 게임을 해보기로 했다. 컴퓨터와 게임을 하기 위해 프로그램을 만들어본다. 간단하게 한판 하는 프로그램 간단하게 '가위 바위 보' 게임을 한판만 하는 프로그램을 제작해보자. 이 경우 게임의 진행순서는 대략 다음과 같을 것이다. 사용자에게 '가위, 바위, 보' 중 하나의 입력을 받는다. 컴퓨터도 세 개의 값 중 하나를 고른다. 사용자가 고른 값과 컴퓨터가 고른 값을 비교하여 승, 패 여부를 확인한다. 사용자에게 결과를 출력한다. 사용자로부터 입력받기 사용자에게 가위, 바위, 보를 선택하게 하는 방법은 여러 가지가 있다. 버튼을 만들어 하나를 선택하게 할 수도 있고, 키보드로 입력을 받을 수도 있으며, 음성 혹은 카메라로 입력을 받는 방법도.. 2021. 8. 12.
python argparse를 사용하여 커맨드 라인 인자 처리하기 python을 notebook형식이 아닌 .py 파이썬 파일 형식으로 커맨드상에서 실행하는 경우들이 존재한다. 이 경우 프로그램 실행 시에 커맨드 라인상에서 인자를 전달해야 하는 경우가 있다. 예를 들어 아래와 같이 커맨드에서 실행하도록 한다고 해보자. python train.py resnet 또는 더 많은 인자를 주어서 아래 처럼 실행하는 것도 가능하다고 하자. python train.py resnet --epochs 777 --batch-size 64 --epoches, --batch-size는 타이핑하기 길기 때문에 -e, -b로 짧게 인자를 넘기는 것도 가능하게 하고 싶다. python train.py resnet -e 777 -b 64 위처럼 작동하게 하고 싶다면, 커맨드 라인 (command .. 2021. 8. 4.
python functools.partial 사용 partial을 사용하여 인자가 여러 개인 함수에 몇 개의 인자가 이미 설정되어있는 새로운 함수를 생성할 수 있다. 그런데 언제 필요할까? multiprocessing.Pool의 map()은 함수를 인자로 받는다. 그 함수는 인자가 하나여야 한다. 하필 내가 사용해야 하는 함수는 인자를 여러 개를 받는데, map()에서 실행하는 경우 인자 중 하나를 제외하고 계속 동일한 값이 들어가는 경우라면? partial을 이용하면 그 하나의 인자를 제외한 나머지 인자들을 고정한 함수를 만들 수 있다. 이 방법으로 새로운 함수는 인자를 하나만 받게 하여 map()에서 사용할 수 있도록 한다. partial의 간단한 사용법 사용법이 매우 간단하다. from functools import partial 아래 두 수를 곱.. 2021. 7. 22.
Matplotlib로 subplot을 생성하고, 겹치지 않게 하기 matplotlib를 사용하면서 subplot을 만들어야 하는 상황이 생긴다. subplot(), add_subplot(), subplots() 이 세 개의 함수은 subplot을 만드는데 쓰인다. 사용법의 차이를 알아보기 위하여 아래 x로부터 생성된 y1, y2, y3를 각기 다른 방법으로 subplot에 그려보았다. import numpy as np import matplotlib.pyplot as plt x = np.arange(0,5,0.1) y1 = np.cos(x) y2 = np.exp(x) y3 = y1 * y2 plt.plot(x,y1) plt.show() plt.plot(x,y2) plt.show() plt.plot(x,y3) plt.show() Subplot 만들기 pyplot.subp.. 2021. 7. 17.
공공 데이터 포털에서 "공휴일" 정보 받기 공휴일을 모아놓은 데이터가 필요할 때가 있다. 어떤 데이터에 날짜가 포함되어있는데 우리가 예측하려는 값이 휴일과 관계가 있을지도 모르기 때문이다. 공공 데이터 포털에서는 공휴일 정보를 받을 수 있는 api도 제공하고 있다. 이 api를 사용해 보자. API 사용 전 준비 회원가입 Api를 사용하기 전, 공공데이터 포털에서 회원가입을 하여야 한다. 공공데이터 포털 우측 상단에 회원가입 버튼을 눌러 회원가입부터 진행해 주자. 활용신청 Api 활용신청을 해주자. 우리가 사용할 데이터는 한국 천문연구원의 특일정보 데이터이다. 데이터 검색화면에 특일로 검색하여 특일정보 데이터의 활용신청을 해주자. 검색 검색결과 활용신청 활용 신청 후 승인이 되었다면 마이페이지 > 개발계정에서 다음과 같은 화면을 볼 수 있다. 여.. 2021. 7. 15.
Python opencv로 좌표 형태의 도형을 mask 이미지 배열로 변환, 또 역으로 Computer vision과 관련된 AI 경진대회들 중에서는 이미지에서 특정 물체를 분리해야 하는 과제를 주는 대회들이 존재한다. 이때, '어떤 물체가 어디에 존재한다'라는 정보를 mask 이미지로 주는 대회가 있는가 하면 영역을 다각형으로 표현하여 이 다각형의 좌표로 제공하는 대회가 있다. Segmentation 모델의 대부분은 mask 이미지를 받고, 또 mask 이미지의 형태로 결과를 반환한다. 다각형 좌표로 제공받았다면, 이를 mask 이미지로 변환하는 과정이 필요하다. 이 과정에 대하여 알아보자. import numpy as np import cv2 import matplotlib.pyplot as plt 좌표 형태의 도형을 mask배열로 만들기 opencv에 이미 관련 기능이 구현이 되어있다.. 2021. 7. 13.
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.