Python 의 속 도 를 40 배 이상 올 릴 수 있 는 신기 Cython 상세 설명

4687 단어 Cython가속Python
Python 의 속 도 를 40 배 이상 올 리 는 신기:Cython
인공지능 의 가장 핫 한 언어 는 당연히 지금까지 가장 사용 하기 쉬 운 코드 중 하나 로 불 리 는 Python 이다.Python 코드 는 직관 적 이 고 가 독성 이 높 기로 유명 하 다.
그러나 사용 하기 쉬 운 뒤 에는 Python 이 넘 을 수 없 는 장애:느리다.특히 C 프로그래머 들 은 파 이 썬 의 느 린 속 도 를 참 을 수 없 었 다.
그래서 누 군 가 는 여러 가지 방법 을 생각해 서 이 문 제 를 해결 하고 본 고 는 그 중의 하 나 를 소개 한다.코드 가 순수 Python 이거 나 큰 for 순환 을 사용 해 야 하 는데 행렬 에 넣 을 수 없습니다.데이터 가 순서대로 처리 되 어야 하기 때문에 Cython 을 사용 하여 Python 을 가속 화 할 수 있 습 니 다.
1,무엇이 Cython?
위 키 백과:Cython 은 Python 과 C 의 문법 을 결합 한 언어 로 Python 에 정적 유형 을 추가 한 문법 이 라 고 간단하게 볼 수 있 습 니 다.사용 자 는 대부분의 Python 문법 을 유지 할 수 있 고 주요 한 프로그램 논리 와 알고리즘 을 대폭 조정 하지 않 아 도 됩 니 다.그러나 바 이 너 리 프로그램 으로 직접 컴 파일 되 기 때문에 파 이 썬 보다 성능 이 크게 향상 된다.
Cython 은 높 은 실행 효 과 를 얻 기 위해 CPython 편지 라 이브 러 리 에 대량으로 사용 되 었 다.Cython 은 CPython 코드 를 C 또는 C++문법 으로 번역 한 후,자동 포장 에 함 식 호출 인터페이스 에서.pyx 접미사 의 실행 파일 을 생 성하 여 일반적인 함 식 라 이브 러 리 로 사용 할 수 있 습 니 다.그 성능 은 일반적으로 원생 의 C/C++함 식 라 이브 러 리 보다 못 하지만 CPython 문법 이 용이 하기 때문에 개발 시간 을 단축 시 킬 수 있다.Cython 은 C/C++를 CPython 으로 작성 한 편지 라 이브 러 리 를 컴 파일 하 는 데 도 사용 할 수 있다.
현재 Cython 은 Windows,macOS,Linux 에서 사용 할 수 있 으 며 2.6,2.7,3.3~3.7 버 전의 CPython 문법 을 컴 파일 할 수 있다.
Python 코드 에 대한 유일한 조정 은 모든 변수 에 유형 정 보 를 추가 하 는 것 입 니 다.일반적으로,우 리 는 Python 에서 변 수 를 설명 할 수 있 습 니 다.다음 과 같 습 니 다.

x = 0.5
Cython 을 사용 하면 이 변수 에 종 류 를 추가 합 니 다.

cdef float x = 0.5
이것 은 Cython 에 게 우리 의 변 수 는 부동 소수점 이 고 C 와 같다 는 것 을 알려 줍 니 다.순수 Python 을 사용 하면 변수의 유형 은 동적 으로 확 정 됩 니 다.Cython 에서 유형의 명시 적 성명 은 C 로 전환 할 수 있 는 이유 입 니 다.명시 적 형식 성명+가 필요 하기 때 문 입 니 다.
Cython 을 설치 하려 면 pip 한 줄 만 필요 합 니 다:

pip install cython
2.Cython 의 유형
Cython 을 사용 할 때 변수 와 함수 에 사용 되 는 두 가지 유형 이 있 습 니 다.
변수 에 대해 우 리 는:

cdef int a, b, c
cdef char *s
cdef float x = 0.5 (single precision)
cdef double x = 63.4 (double precision)
cdef list names
cdef dict goals_for_each_play
cdef object card_deck
이 모든 유형 은 C/C++에서 나 오 는 것 을 주의 하 세 요! 
기능:

def ― regular python function, calls from Python only.
cdef ― Cython only functions which can't be accessed from python-only code i.e must be called within Cython
cpdef ― C and Python. Can be accessed from both C and Python
지금부터 가속 을 시작 하 겠 습 니 다!준비 해..
3.Cython 가속 코드 사용
우리 가 해 야 할 첫 번 째 일 은 Python 코드 기준 을 설정 하 는 것 입 니 다.디지털 단 계 를 계산 하 는 for 순환 입 니 다. 
원본 Python 코드 는 다음 과 같 습 니 다.

def test(x):

  y = 1

  for i in range(x+1):

    y *= i

  return y
Cython 의 같은 기능 은 매우 비슷 해 보인다.Cython 코드 파일 에.pyx 확장 자 를 사용 하 는 지 확인 하 십시오.코드 자체 의 유일한 변 화 는 변수 와 함수 의 유형 을 미리 설명 해 야 하 는 것 입 니 다.예제 코드 는 다음 과 같 습 니 다.

cpdef int test(int x):

    cdef int y = 1

    cdef int i

    for i in range(x+1):

        y *= i

    return y
함수 에 Python 에서 호출 할 수 있 도록 cpdef 가 있 습 니 다.또한 함수 의 모든 변수 에 유형 을 설정 하여 C 컴 파일 러 에 알려 야 합 니 다.
다음은 setup.py 파일 을 만 듭 니 다.이 파일 은 Cython 코드 를 C 코드 로 컴 파일 합 니 다.

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize('run_cython.pyx'))
컴 파일 실행:

python setup.py build_ext --inplace
해결!우리 의 C 코드 는 이미 컴 파일 되 었 고 사용 할 수 있다.
Cython 코드 가 있 는 폴 더 에는 run 을 포함 하여 C 코드 를 실행 하 는 데 필요 한 모든 파일 이 있 습 니 다.cython.c 파일,당신 은 들 어가 서 결말 을 자세히 볼 수 있 습 니 다.
이제 우 리 는 새로운 초고 속 C 코드 를 테스트 해 야 한다!준비 됐어 요?3、2、1、go!

import run_python
import run_cython
import time
 
 
number = 10
 
 
start = time.time()
run_python.test(number)
end =  time.time()
 
py_time = end - start
print("Python time = {}".format(py_time))
 
start = time.time()
run_cython.test(number)
end =  time.time()
 
cy_time = end - start
print("Cython time = {}".format(cy_time))
 
 
print("Speedup = {}".format(py_time / cy_time))
Cython 은 거의 모든 원본 Python 코드 에 좋 은 속 도 를 제공 할 수 있 으 며 추가 작업 을 많이 할 필요 가 없습니다.순환 이 많 을 수록 처리 하 는 데이터 가 많 을 수록 Cython 이 도움 이 된다 는 것 을 기억 하 세 요.
다음 표 에서 Cython 이 서로 다른 단계 곱 하기 값 에 얼마나 속 도 를 제공 하 는 지 보 여 줍 니 다.우 리 는 Cython 을 사용 하여 36 배가 넘 는 속 도 를 얻 었 습 니 다!
图片
파 이 썬 의 속 도 를 40 배 이상 끌 어 올 릴 수 있 는 신기 싸 이 썬 에 대한 상세 한 설명 은 여기까지 입 니 다.더 많은 싸 이 썬 가속 파 이 썬 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기