반응형

Python + Cython  첫 번째

 

정리. 오상문


Python 코드의 특정 부분을 Cython으로 최적화할 수 있습니다.

(Cython을 사용하여 해당 부분을 C로 변환하고 성능을 향상시킵니다.)

1. Cython 설치 


먼저 Cython을 설치해야 합니다. 다음 명령으로 Cython을 설치할 수 있습니다.

pip install cython

2. 소스 코드 작성  

 

최적화하려는 Python 함수나 모듈을 포함하는 .pyx 파일을 작성합니다. 

.pyx 파일은 Python과 C/C++의 혼합 언어로 작성되며, 

Cython 문법을 사용하여 Python 코드를 C로 변환할 수 있습니다.

3. Cython 코드 작성  

 

.pyx 파일에 Cython 문법을 사용하여 성능을 향상시킬 부분을 지정합니다. 
이때 변수 형식을 명시하거나 C언어 특정 기능을 사용할 수 있습니다.

4. .pyx 파일 컴파일

  
.pyx 파일을 컴파일하여 C 확장 모듈을 생성합니다. 
이를 위해 다음 명령을 실행합니다.

cythonize -i your_module.pyx

your_module.pyx는 최적화할 .pyx 파일명입니다. 
-i 옵션은 컴파일된 모듈을 바로 사용할 수 있도록 확장 모듈을 빌드합니다.

5. Python 코드 수정  

 

Python 코드에서 최적화된 C 확장 모듈을 불러와서 사용하려면 import 문을 사용합니다.

Cython을 사용한 최적화는 숫자 연산, 반복 루프, 배열 조작 등의 CPU 집약적 작업에 유용합니다. Cython은 특정 작업을 C로 컴파일하고 Python 인터프리터와의 상호 운용성을 제공하여 성능을 향상시키는 데 도움이 됩니다. 



예제 : 두 리스트 항목별 합 구하여 돌려주는 Cython, Python 연동 예제

1. .pyx 파일을 생성합니다. (파일 이름은 vector_sum.pyx로 가정합니다.)

 

함수에서 두 정수 배열을 입력받아 각 원소를 합산하고 결과 배열을 반환합니다.

# vector_sum.pyx


def cython_vector_sum(list a, list b):
    cdef int n = len(a)
    cdef list result = [0] * n
    
    for i in range(n):
        result[i] = a[i] + b[i]
    
    return result

2. Cython 코드를 컴파일합니다. 터미널에서 다음 명령을 실행합니다:

cythonize -i vector_sum.pyx

vector_sum.c와 vector_sum.pyd(Windows) 또는 vector_sum.so(Linux/macOS) 파일이 생성됩니다.

(참고로, 예제를 진행하다보니 vector_sum.cp39-win_amd64.pyd 파일이 만들어졌음)


[참고] cythonize 명령 
Cython을 설치한 후에 사용할 수 있으며, Cython 코드를 빌드하고 컴파일하는 데 사용됩니다

3. Python 코드(main.py)에서 Cython 모듈을 사용합니다. 


Python 스크립트에서 다음과 같이 Cython 모듈을 불러와서 사용할 수 있습니다.

# main.py
import vector_sum

# 두 개의 Python 리스트 생성
a = [1, 2, 3, 4, 5]
b = [5, 4, 3, 2, 1]

# Cython 함수 호출
result = vector_sum.cython_vector_sum(a, b)

# 결과 출력
print(result)

코드에서 NumPy를 사용하여 두 정수 배열을 생성하고, 
Cython 모듈의 cython_vector_sum 함수를 호출하여 배열을 합산하여 출력합니다.

4. main.py 실행

 

아래 내용이 화면에 출력됩니다.


[실행 결과]
[6, 6, 6, 6, 6]

 

반응형

+ Recent posts