본문 바로가기

반응형

Python

(30)
Argparse nargs, const, default 인자 사용법 파이썬 파일 실행 시 원하는 인자를 커맨드라인 상에서 전달하기 위해 argparse 패키지를 많이 사용할 겁니다. 실제로 파이썬에서 처음 접하게 되는 내장 라이브러리 중 하나입니다만 argument를 추가할 때 사용하는 함수의 (add_argument 함수) type, default 인자 이외의 생소한 인자를 만나게 되면 항상 사용법을 검색하게 되는데, 저 같은 경우는 nargs/const/default 인자입니다. nargs 인자 nargs 인자는 Number of Arguments 의미를 가지며 말 그대로 해당 argument에 대해 몇 개의 value를 넣을 것인지를 정합니다. 구체적인 숫자를 넣어도 되고 쉘 스크립트에서 사용되는 wildcard 캐릭터도 사용법이 미리 정의되어 있습니다. CLI 상..
프로파일링 (1) - 줄리아 집합 (Julia set) 파이썬은 C/C++ 과 같은 컴파일 기반 언어에 비해 느립니다. 하지만 프로파일링으로 프로그램 속도의 병목 지점을 찾아 최소한의 노력으로도 성능을 최대한 끌어올릴 수 있습니다. 파이썬에서는 timeit 같은 매직 명령어와 cProfile, line_profiler, memory profiler 등의 여러 프로파일 패키지 및 함수를 제공하며, 이를 통해 병목이 발생하는 함수, 함수 안의 라인까지도 소요 시간/메모리 등을 자세하게 측정할 수 있고 CPU 뿐만 아니라 GPU, 네트워크 대역폭, 디스크 I/O 등 사용되는 거의 모든 리소스에 대해서 측정할 수 있습니다. 줄리아 집합 (Julia set) 줄리아 집합은 가스통 줄리아가 고안한 프랙탈의 일종으로 주어진 복소수 $c$에 대해서 다음 점화식에 따라 정의..
자료구조 - 리스트와 튜플 (List, Tuple) 리스트와 튜플은 파이썬의 배열 자료구조로서 리스트는 아마 파이썬에서 가장 많이 사용되는 자료구조일 겁니다. 배열에서는 항목의 내용 자체만큼이나 항목이 배치된 순서가 굉장히 중요한데, 리스트는 저장하는 데이터나 배열 크기를 변경할 수 있는 동적 배열이고 튜플은 내용과 순서가 고정된 변경 불가능한 정적 배열입니다. 파이썬은 배열을 생성하기 위해 연속된 시스템 메모리 블록을 할당하고 각 메모리에는 실제 데이터를 가리키는 정수 타입 크기의 포인터가 담겨 모든 타입의 데이터를 저장할 수 있습니다. (이는 numpy array 와 다른 점인데, numpy 배열은 정적으로 타입이 정해져있어 다른 타입의 값을 저장할 수 없습니다) 따라서 연속적인 메모리에 정렬되어 저장된 데이터는 배열의 크기와 상관없이 배열이 시작되는..
파이썬으로 행렬 구현하기 (4) - 마무리 [알고리즘 & 코딩테스트/코딩테스트] - 파이썬으로 행렬 구현하기 (1) [알고리즘 & 코딩테스트/코딩테스트] - 파이썬으로 행렬 구현하기 (2) [알고리즘 & 코딩테스트/코딩테스트] - 파이썬으로 행렬 구현하기 (3) - 가우스 조던 소거법을 이용한 역행렬 지난 포스트들에서 numpy 라이브러리 없이 순수히 파이썬 문법으로만 행렬을 구현해보았습니다. 먼저, 행과 열이 주어지거나 이중 리스트가 들어왔을 때 행렬을 표현할 수 있도록 클래스를 정의했고 이후에 덧셉, 곱셈, 뺄셈, 역행렬 등의 다양한 행렬 연산을 추가하였습니다. 보통 이런 류의 문제를 내는 코딩테스트에서는 여기서 끝나지 않습니다. 구현한 행렬 클래스를 기반으로 행렬을 이용한 다양한 알고리즘 문제를 서브 문제로 출제하는 경우가 보통입니다. 따라..
파이썬으로 행렬 구현하기 (3) - 가우스 조던 소거법을 이용한 역행렬 [알고리즘 & 코딩테스트/코딩테스트] - 파이썬으로 행렬 구현하기 (1) [알고리즘 & 코딩테스트/코딩테스트] - 파이썬으로 행렬 구현하기 (2) 지난 포스트에서의 행렬 덧셈, 뺄셈, 곱셈에 이어 이번 포스트에서는 행렬의 역변환, 역행렬을 구현해보도록 하겠습니다. 행렬의 행과 열의 크기가 같은 정방행렬의 역행렬을 구하는 방법으로는 대표적으로 가우스-조던 소거법이 있습니다. $AX=I$에서 A의 역행렬 $X$를 구하는 가우스-조던 소거법의 기본은 $AX$를 $IX$로 바꿔주기 위해 1) 행렬의 한 행을 상수배, 2) 행렬의 두 행을 바꿈, 3) 한 행을 상수배하여 다른 행에 더하는 기본 행연산을 수행한다는 것입니다. 행렬의 각 행은 일차방정식이라 볼 수 있고 각 일차방정식을 identity matrix에 ..
파이썬으로 행렬 구현하기 (2) [알고리즘 & 코딩테스트/코딩테스트] - 파이썬으로 행렬 구현하기 (1) 이번 포스트에서는 지난 포스트에서 구현한 행렬 클래스를 기반으로 덧셈, 뺄셈, 곱셈 등의 다양한 행렬 연산을 구현해보도록 하겠습니다. 이때 행렬 클래스끼리 더하거나 곱하는 등의 연산이 가능하도록 언더바 두개로 이루어진 magic method (__magic_method__) 함수를 정의하는 방식으로 구현하도록 하겠습니다. 덧셈과 뺄셈 먼저 덧셈을 구현합니다. 주의 사항으로는 더할 두 행렬의 행과 열의 크기가 같아야하고 만약 정수를 더할 때에는 기존 행렬의 행 혹은 열의 크기가 1일 경우 (벡터의 경우) 모든 원소에 정수를 더하고 행, 열의 크기가 모두 1보다 크다면 대각선 원소만 더한다고 가정합니다. 만약 기존 행렬의 행, 열의 크..
Property와 descriptor (디스크립터) 지난 포스트에서 클래스의 어트리뷰트의 값을 정하고 불러오는 @property와 setter, getter 메소드에 대하여 알아봤습니다. 하지만 @property 데코레이터의 단점으로는 @property가 데코레이션하는 메서드를 같은 클래스에 속하는 여러 애트리뷰트로 사용할 수 없고 서로 무관한 클래스 사이에서 @property 데코레이터를 적용한 메서드를 재사용할 수 없습니다. 예를 들어 학생에게 여러 과목의 시험 성적 점수를 별도로 부여하고 싶다고 합시다. class Exam: def __init__(self): self._writing_grade = 0 self._math_grade = 0 @staticmethod def _check_grade(value): if not (0 >> first_exam..
ModuleNotFoundError 와 ImportError 큰 프로젝트를 구현하다보면 비슷한 기능을 수행하는 클래스와 함수를 별도의 디렉토리, 파일로 refactoring 하고 메인 디렉토리에서 main.py (혹은 test.py)를 수행하게 됩니다. 보통 파이썬 패키지를 구현하면 메인 working directory 에서 소스코드가 담긴 src 디렉토리, 예시가 담긴 examples 디렉토리, 테스트를 위한 tests 디렉토리를 구성하게 되는데요, src 디렉토리 이름을 Figure 1과 같이 working 디렉토리 이름과 같이 정하는 경우도 흔히 있습니다. Figure 1은 HongLearning이란 패키지 예시이고 소스 코드를 HongLearning 디렉토리 안에 구현했다고 가정했을 때의 디렉토리 트리 구조입니다. 현재 current working dire..

반응형