대답을 세 부분으로 나눕니다. 프로파일 링, c를 통한 파이썬 코드 속도 향상 및 파이썬을 통한 파이썬 속도 향상 파이썬에는 코드의 성능을 확인하고 실제 병목으로 드릴 다운하는 데 가장 적합한 도구가 있다고 생각합니다. 프로파일 링없이 코드 속도를 높이는 것은 uzi로 사슴을 죽이는 것과 같습니다.
mat-vec 제품에만 관심이 있다면 scipy.sparse를 추천 합니다 .
프로파일 링을위한 Python 도구
프로파일 및 cProfile 모듈 :이 모듈은 표준 런타임 분석 및 함수 호출 스택을 제공합니다. 통계를 저장하고 pstats 모듈을 사용하면 여러 가지 방법으로 데이터를 볼 수 있습니다.
kernprof :이 도구는 라인 별 코드 타이밍과 같은 작업을 수행하기위한 많은 루틴을 구성합니다.
memory_profiler :이 도구는 코드의 라인 단위 메모리 풋 프린트를 생성합니다.
IPython timers :이timeit
함수는 함수의 차이점을 빠른 대화식 방식으로 보는 데 아주 좋습니다.
파이썬 속도 향상
Cython : Cython 은 파이썬에서 몇 가지 기능을 사용하고 더 빠른 코드를 얻는 가장 빠른 방법입니다. python의 cython 변형으로 함수를 장식하고 c 코드를 생성 할 수 있습니다. 이것은 매우 메인 테이블이며 c / c ++ / fortran에서 다른 손으로 작성한 코드에 쉽게 연결할 수 있습니다. 오늘날 가장 선호되는 도구입니다.
ctypes : ctypes를 사용하면 c로 함수를 작성한 다음 간단한 코드 장식으로 빠르게 래핑 할 수 있습니다. PyObjects에서 캐스팅하고 c 함수를 호출하기 위해 길을 관리하는 모든 고통을 처리합니다.
C로 코드를 작성하는 다른 방법이 있지만 C / C ++ 라이브러리를 파이썬으로 랩핑하는 데는 다소 더 큽니다.
파이썬 전용 접근법
파이썬 내부에 머무르기를 원한다면 어떤 데이터를 사용하는지 알고 알고리즘을 구현하기 위해 올바른 데이터 유형을 선택하는 것이 좋습니다. 데이터 구조를 최적화 한 다음 저수준 c 핵을 최적화하면 일반적으로 훨씬 더 멀리 갈 수 있다는 것이 제 경험이었습니다. 예를 들면 다음과 같습니다.
numpy : 배열의 스트 라이딩 작업에 매우 빠른 연속 배열
numexpr : numpy 배열 표현식 최적화 프로그램. 다중 스레딩 numpy 배열 표현식을 허용하고 Python 인터프리터의 제한으로 인해 numpy가 만드는 수많은 임시 항목을 제거합니다.
blist : 목록의 b-tree 구현으로 목록의 내부 노드를 삽입, 색인 및 이동하는 데 매우 빠릅니다.
팬더 : 데이터 프레임 (또는 테이블) 어레이에서 매우 빠른 분석.
pytables : 빠른 구조적 계층 구조 테이블 (예 : hdf5). 특히 코어 계산 및 대용량 데이터 쿼리에 적합합니다.