2016-06-08 17 views
1

지금은 파이썬에서 약 100 줄 정도의 이미지 처리 알고리즘을 사용하고 있습니다. numpy, PILscipy을 사용하면 약 500ms가 소요됩니다. 나는 그것을 더 빨리 얻으려고하고 있으며, 실제 알고리듬이 지금까지 꽤 최적화 된 것처럼 보이기 때문에 Cython과 같은 다른 접근법을 사용하면 시간이 향상되는지 궁금합니다.Cython과 Python.h로 C/C++를 확장 한 것의 차이

  1. 사용 사이 썬 파이썬 C 라이브러리의 관련 부분을 노출 : 나는 내가 할 수있는 몇 가지 다른 일을 가지고 있다고 생각합니다.
  2. 사용하는 ctypes는 C의 모든 쓰기하지만 여전히
  3. 는 C/C에서 확장 모듈 만들기 ++하고 그것을 가져 와서 함수를 호출 (모든이쪽으로 생각이 기울고되지 않음) 그것을 순수 파이썬을 가지고 있습니다. 비록 내가 numpy이 방법을 사용할 수 있을지 모르겠다.
  4. DLL을 만들고 Python을로드하십시오. 이것은 numpy 또는 그 모듈을 사용하지는 않지만 여전히 효율적입니다.

여기서는 속도를 찾고있어 구현의 어려움에 대해 걱정하지 않습니다. 이 경우에 더 나은 옵션이 있습니까? 모두 동일하거나 가치가 있습니까?

답변

1

여기서해야 할 일이 무엇인지 알면 도움이됩니다.

함수 호출에 ctypes을 사용하지 않는 경우 ctypes 유형 만 포함되도록 저장할 필요가 없습니다. 만약 당신이 이미 "나를 위해 그것을 해결"함수와 함께 주위에 거짓말을 DLL을 가지고, 그럼, ctypes입니다.

Cython은 확장 모듈을 생성하므로 Cython으로 할 수있는 모든 기능은 확장 모듈을 사용하여 수행 할 수도 있습니다. 확장 기능 모듈을 사용하면 손쉽게 확장 기능을 작성하는 것이 얼마나 편한 지 알 수 있습니다. Cython은 손으로 확장 기능을 작성하는 것보다 훨씬 제한적이며, Cython을 최적화하는 규칙은 기본적으로 CPython 코드를 최적화하는 것과 반대입니다. cdef을 잊어 버리면 아무 것도 얻지 못합니다.하지만 Cython 일반적으로 너무 간단합니다.

별도의 비 확장 DLL을 작성하는 것은 Python 이외의 용도로 사용하는 경우에만 가치가 있습니다. 그렇지 않으면 Python 확장은 기본적으로 DLL의 경우이지만 더 잘 통합됩니다.

기본적으로 무한한 시간과 기술로 CPython 확장은 다른 사람들이하는 모든 일을 할 수 있기 때문에 성능면에서 다른 옵션보다 우수합니다. 그것은 단지 더 많은 작업이고 실수를하기 쉽습니다 (C를 작성하기 때문에 오류가 발생하기 쉽습니다).