본문 바로가기

728x90
반응형

Langauge

(14)
[Python] Python과 C++ 연동 Python은 동작할 때, 컴파일러를 통해 바이트 코드로 변환되어 PVM을 통해 실행된다. 이러한 특징 때문에 빠른 속도를 요구하는 프로그램 작성시 상대적으로 느린 속도를 보인다. 속도 개선을 위해 다양한 방법을 적용할 수 있지만 OpenCV-Python을 사용한 연산에서는 Numba 같은 라이브러리를 지원하지 않기 때문에 어렵다. 이러한 문제를 해결하기 위해 C++로 코드를 작성하고 Python에서 함수 처럼 사용할 수 있도록 하는 pybind11이 나왔다.pybind11은 Python의 C API를 기반으로 한다. 주요 특징은 다음과 같다.간변한 바인딩 : C++ 함수와 클래스를 Python에서 사용할 수 있도록 쉽게 바인딩할 수 있다. C API를 직접 다루지 않아도 된다.자동 타입 변환 : C++..
[Python] 연산 속도 올리기 - Numba 🐍 본 게시글은 Python 3.11.0 환경에서 작성되었습니다! Numba는 Python을 위한 Just-In-Time(JIT) 컴파일러로, 주로 수치 계산 및 과학적 컴퓨팅을 최적화하는 데 사용된다.Numpy와 함께 사용될 때 특히 강력하다. 특징JIT 컴파일 : 파이썬 코드를 실행 시간에 컴파일 하여 성능을 향상한다.Numpy 호환 : Numpy 배열과 많은 함수와 연산을 지원한다.GPU 지원 : NVIDIA GPU에서 CUDA를 사용하여 병렬 처리를 지원한다.간편한 사용 : 기존 Python 코드에 주석을 추가하는 방식으로 쉽게 사용할 수 있다. 장점성능 향상 : Python 코드를 C, Fortran과 유사한 속도로 실행 할 수 있게 한다.직관적인 인터페이스 : 코드를 최소한의 수정으로 사용할..
[Python] 병렬 처리 🐍 본 게시글은 Python 3.11.0 환경에서 작성되었습니다! 여러가지 작업을 처리해야 하는 경우 병렬 처리를 통해 훨씬 빠르게 처리할 수 있다.Multi-Processing4개의 작업을 순차적으로 처리해야 하는 경우, 멀티 프로세싱을 통해 병렬로 4개의 작업을 동시에 처리 할 수 있다.멀티 프로세싱은 메모리를 독립적으로 나누어 작업을 처리한다.자원을 독립적으로 점유하여 처리하기 때문에 안정적이다.개별적으로 자원을 점유하기 때문에 리소스 요구량이 크다. 한번에 처리할 수 있는 수는 CPU Core의 개수에 따라 다르다.import timefrom multiprocessing import Pooldef cpu_intensive_task(n): result = 0 for i in range(..
[Python] 연산 속도 올리기 - 프로파일링(Profiling) 🐍 본 게시글은 Python 3.11.0 환경에서 작성되었습니다! 프로파일링은 함수의 호출, 반환, 예외를 추적하고 각 함수 호출과 이벤트를 추적한다. 이를 통해 상대적으로 리소스를 많이 소비하는 부분(병목)을 찾아서 성능 개선에 집중 할 수 있다.import cProfileimport numpy as npdef find_max_python(numbers): max_value = numbers[0] for num in numbers: if num > max_value: max_value = num return max_value# 숫자가 포함된 리스트numbers = [np.random.randint(0,1000) for _ in range(1000000)..
[Python] 연산 속도 올리기 - 내장 함수 사용 🐍 본 게시글은 Python 3.11.0 환경에서 작성되었습니다! 연산 속도를 올리기 위해서 파이썬의 내장함수를 사용하여 개선할 수 있다. 예시 : 리스트 중복 제거 및 정렬import timeif __name__ == "__main__": # 중복된 숫자가 포함된 리스트 numbers = [5, 3, 8, 5, 2, 3, 9, 1, 2, 8, 7] start = time.time() # 1. 중복 제거 unique_numbers = [] for num in numbers: if num not in unique_numbers: unique_numbers.append(num) time.sleep(0.1) # 2. 정렬 (버블 정렬..

728x90
반응형