문제

나는 익숙하다고 생각 쓰 peak 피팅 라이브러리다.내가 알고있는 파이썬은 상당히 잘하고 구현하는 계획에서 모든 것을 Python 로 시작하지만 정시하고 있습니다 다시 일부를 구현하는 핵심 루틴에서 컴파일한 언어 결국.

IIRC,하나의 파이썬의 원래 하신었으로 프로토타이핑 언어로,그러나 파이썬은 매우 진보적에서 허용하는 함수,함수 개체로 전달할 기능 및 방법,반면 나는 같은 생각지 않은 사실의 말 C 나 Fortran.

나는 무엇을 해야에 대해 알고 디자인하는 기능/클래스는 일이 인터페이스로 컴파일된 언어입니까?고 얼마나 많은 이들의 잠재적인 문제 처리에 라이브러리 등과 같은 지원하는 완전,bgen, , 습니다.Python, CythonPython SIP?

이를 위해 특정 사용하는 경우,(피팅 라이브러리)내가 상상할 수 있도록 사용자가 정의한 수학적 기능(Guassian,로렌츠 등등.) 로 Python 기능을 할 수 있는 그런 다음 전달되는 해석에 의하여 컴파일 된 코드 피팅 라이브러리입니다.전달 및 배열을 반환하는 것도 필수적이다.

도움이 되었습니까?

해결책

마지막으로 질문하는 내가 정말 넣을 수 있습니다 값이 대답:).

나는 조사 f2py,습니다.python,원,cython 및 pyrex 내 일(박사 과정에서는 광학적 측정을 기술).내가 사용되는 원 광범위하게 합니다.python 일부와 파이렉스 및 cython 이 많습니다.또한 사용 지원하는 완전한.이것은 나의 내역:

면책 조항:이것은 나 개인적인 경험이 있습니다.나는 참여하지 않으로 이러한 프로젝트입니다.

꿀꺽: 라인으로 c++.해야 하지만,이름은 엉망으로 문제를 연결하는 단계이었다 중요한 두통에서 나를 위 linux 및 Mac OS X.이 있는 경우 C 코드고 원하는 인터페이스 python,그것은 좋은 솔루션입니다.나는 감 GTS 나의 요구를 쓰기 위해 필요한 기본적으로 C 공유 라이브러리는 내가 연결할 수 있습니다.나는 그것을 추천하지 않을 것입니다.

지원하는 완전한: 썼 libdc1394(IEEE 카메라 라이브러리)래퍼를 사용하여 지원하는 완전하고 그것은 매우 straigtforward 경험이다.당신을 찾을 수 있습니다 코드 https://launchpad.net/pydc1394.그것은 많은 작업을 변환하는 헤더 파이썬 코드,그러나 모든 것이 안정적으로 작동합니다.이것은 좋은 방법이고 싶은 경우 인터페이스 외부 라이브러리입니다.지원하는 완전도 stdlib 의 python,그래서 모두 사용할 수 있는 코드습니다.이것은 또한 좋은 방법은 플레이와 주위에 새로운 lib 에서는 파이썬다.추천 할 수 있습 인터페이스 외부 라이브러리.

습니다.Python:매우 즐겁다.이미 있는 경우 C++코드에 당신의 자신의 사용하려면 원하는 파이썬에서 이동합니다.그것은 매우 번역하기 쉽 c++클래스 구조로는 파이썬 클래스 구조에 이 방법입니다.나는 그것을 권장이 있는 경우 c++코드에 당신이 필요로 하는 python.

Pyrex/Cython: 사용 Cython 지,Pyrex.기간입니다.Cython 더 진보와 더 즐겁게 사용할 수 있습니다.요즘 내가 모든 것을 가진 cython 는 사용으로 병이나 지원하는 완전한.그것은 또한 가장 좋은 방법이 있는 경우 python 실행되는 코드가 너무 느려집니다.프로세스가 절대적으로 환상적인:을 변환하는 파이썬 모듈로 cython 모듈을 구축하고 유지 프로파일링과 최적화하는것 같이 여전히 파이썬(변화의 도구가 필요합니다.)에 적용할 수 있습으로 많(또는)C 코드와 혼합하는 파이썬 코드입니다.이것은 훨씬 더 빠르게 다음 다시 작성하는 전체 부품의 응용 프로그램에서는 C당신은 다시 작성 inner loop.

타이밍:지원하는 완전한 가장 높은 오버헤드를 호출(~700ns),그 뒤로 합니다.python(322ns),다음에 의해 직접 원(290ns).Cython 가장 낮은 호출 오버헤드(124ns)그리고 최고의 피드백에 시간을 보낸(cProfile 지원!).숫자가에서 나는 상자를 호출하면 사소는 정수를 반환하는 함수에서 대화 형 shell;모듈 가져오는 오버헤드는 따라서 시간 제한되지 않습니다만,함수 호출 오버헤드입니다.그러므로 가장 쉽고 생산성을 얻을 수 python 코드로 빠른 프로파일링 및를 사용하여 cython.

요약:당신의 문제에 대한,사용 Cython;).이 감소 될 것이 유용한 몇몇 사람들이다.내가 기꺼이 대답 남아있는 질문입니다.


편집:내가 잊지를 언급합니다:에 대한 수치적 목적으로(즉,연결하 NumPy)사용 Cython;그들은 그것에 대한 지원(기 때문에 그들은 기본적으로 개발 cython 이러한 목적으).그래서 이 다+1 에 대한 결정입니다.

다른 팁

나는 사용 하지 않은 원거나 SIP 지만,나를 찾을 쓰는 파이썬 래퍼 습니다.python 매우 강력하고 상대적으로 사용하기 쉽습니다.

난 명확하지 않에서 사용자의 요구 사항이 무엇인지 전달하는 유형 C/C++,python,하지만 당신이 할 수있는 하나에 의해 쉽게 노출의 C++입력 데이터베이거나,일반 사용 부스트::python::체 인수하의 C++API 를 사용합니다.할 수 있도록 컨버터를 자동으로 변환 python 유형 C++에 유형 그리고 그 반대입니다.

는 경우에 당신은 계획을 사용 합니다.python,the 튜토리얼 이 시작하기 좋은 장소입니다.

내가 구현한 무언가 비슷하게 당신이 필요합니다.I have a C++기능 지 python 기능과 이미지로 인수,그리고 적용하는 파이썬 기능을 각 화소에 이미지입니다.

Image* unary(boost::python::object op, Image& im)
{
    Image* out = new Image(im.width(), im.height(), im.channels());
    for(unsigned int i=0; i<im.size(); i++)
    {
        (*out)[i] == extract<float>(op(im[i]));
    }
    return out;
}

이 경우에,이미지는 C++개체에 노출되는 파이썬(이미지로 떠 픽셀),고 op python 정의된 기능(또는 정말 python 개체__call__성).할 수 있는 그런 다음 이 기능을 사용하여 다음과 같이(가정하면 단항에 위치한 호출 이미지 포함하는 이미지 load 함수):

import image
im = image.load('somefile.tiff')
double_im = image.unary(lambda x: 2.0*x, im)

으로 배열을 사용하여와 후원,저는 개인적으로 이를 실행하지 않은,그러나 내가 알고있는 기능을 노출시키는 배열을 사용하는 파이썬 향상 가능- 는 것이 도움이 될 수도 있습니다.

을 계획하는 가장 좋은 방법에 대한 최종로의 전환을 컴파일 된 코드를 작성하는 성능에 민감한 부분으로 모듈의 간단한 함수에서 기능적인 스타일 (무국적자 및 부작용 없이)을 받아들이 돌아와 기본적인 데이터 유형이 있습니다.

이렇게 하나의 매핑에서는 파이썬품 코드 최종 컴파일 된 코드를 사용할 수 있도록 지원하는 완전 쉽고 피하기 위해 전체의 무리는 두통.

에 대한 피팅,당신은 거의 확실히 필요한 배열을 사용하는 일을 복잡하게 작은,하지만 여전히 매우 효과적으로 지원하는 완전한.

당신이 정말로 원하는 경우를 사용하여 더 복잡한 데이터 구조,또는 수정된 인수 Python 의 표준 C-확장자 인터페이스 은 당신이 무엇을 원하지만,일부 금액의 번거 로움.

을 위해,당신은 무엇을 수행할 수도 있습니다 확인 NumPy, 수있는 몇 가지의 일을 하려는 것 밀 C 뿐만 아니라,제공하는 몇 가지 추가적인에 도움이 이동하는 데이터 사이에 앞뒤로 Python C.

f2py (부분의 numpy)간단한 대안을 원하고 합니다.python 포장 C/프로그램 번호-재정 코드입니다.

내 경험에 의하면,거기에는 두 가지 방법으로 호출 C 코드에서는 파이썬 코드입니다.다른 방법이있는 더 짜증나 및/또는 자세한 정보를 표시합니다.

첫 번째 및 가장 쉽게 컴파일하는 것입니다 무리의 C 코드 별도로 공유 라이브러리고 다음의 함수를 호출하는 라이브러리를 사용하여 지원하는 완전한.불행하게도,전달하는 아무것도 다른 것보다 기본적인 데이터 유형은 비록 하는 것입니다.

두 번째로 가장 쉬운 방법은 작성하는 파이썬 모듈 C 한 다음의 함수를 호출하는 모듈이 있습니다.전달할 수 있습니다 당신이 원하는 무엇이든 이들 C 기능을 하지 않고 점프를 통해 모든 농구.그리고 쉽게 전화하는 파이썬은 기능이나 방법에서 이러한 C 기능으로,여기서 설명: https://docs.python.org/extending/extending.html#calling-python-functions-from-c

내가 충분하지 않는 경험과 꿀꺽 한하여 제공 지능적인 해설.고 있는 동안 가능한 것과 같은 통과 사용자 지정 Python 개 C 기능을 지원하는 완전한하거나 정의를 새로운 데이터베이스 C,이러한 일들이는 자세한 정보는 것이 좋습을 복용 중 하나는 두 가지 방법 위에서 설명한입니다.

파이썬은 매우 진보적에서 허용하는 함수,함수 개체로 전달할 기능 및 방법,반면 나는 같은 생각지 않은 사실의 말 C 나 Fortran.

C 전달할 수 없는 함수로서의 인수 기능을 하지만 전달할 수 있는 함수 포인터는 그냥 좋은 기능이 있습니다.

저는 얼마나 많이 알고하지 않는 것을 도울 때 당신이 시도하고 있는 통합 C,Python 코드 하지만 난 그냥 지나 오해이다.

또한 도구 위에,나는 추천할 수 있 사용 Pyrex (을 만들기 위한 Python 확장 모듈)또는 사이코 (로 JIT 컴파일러를 위한 Python).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top