2012-04-08 3 views
2

나는 다항식의 항을 여러 변수로 평가하는 함수를 가지고있다. 입력은 각 변수의 지수 목록입니다. 예를 들어, 두 개의 변수와 2 차 것이 파이썬 다항식 최적화

def f(x,y): 
    return [1, x[1], y[1], x[1]*y[1], x[2], y[2]] 

x = [2**0, 2**1, 2**2] 
y = [3**0, 3**1, 3**2] 

>>> f(x,y) 
[1,2,3,6,4,9] 

현실에서 함수가 높은 순서이며, 평균 수천 용어 사실, 나는 함수에서 생성 (이 그래서 많은 변수를 가지고, 다음과 같습니다 eval 문을 사용하여 런타임을 실행하지만 중요하지는 않습니다. 이 함수는 가장 안쪽의 루프에 있으며 현재 속도 병목 현상이 있습니다. 프로파일 러는 대부분의 시간을 __times__에 소비한다고합니다.

누구나 C 확장 모듈을 만들지 않아도 누구나 최적화를위한 공간을 볼 수 있습니까?

편집 : 위의 예는 단지 목록의 각 장기를 두는를 추가하지 않고 제외 x = 2y = 31 + x + y + xy + x^2 + y^2을 평가 해하기 위해 노력하고있다.

A + B*x + C*y + D*x*y + E*x^2 + F*y^2 :

즉 (일부 계수 A, B, ...로) 내가 할 노력하고있어 모든 계산이다 그들이 괜찮 추가.

+0

비슷한 또는 동일한 인수를 사용하여 함수를 얼마나 자주 호출합니까? –

+0

나는 당신의 스크립트가하는 일에 대해 정말로 확신하지 않지만, 당신은 scipy/numpy를 들여다 보았습니까? –

+0

@ NolenRoyalty 좋은 질문입니다, 불행히도 대답은 각 변수가 매번 다를 수 있다는 것입니다. – marius

답변

3

어떤 버전인지 모르겠지만 numpy는 polynomial 모듈에 polyval2d(x,y,c) 함수가 있어야하며 이는 예제에 완벽하게 적용됩니다.

예제를 훨씬 더 높은 차원으로 확장하는 데 관심이있는 것처럼 보였습니다.

동일한 모듈에 polyval3d(x,y,z,c)이 있는데, 충분하지 않다면 source code을 (내가 이미 추측하고있는 것처럼) 제안 할 것입니다. 무엇을 가장 적합한 요구 사항을 구현하기 너무 열심히하지 않아야, 당신은 항상 여기에 요청할 수 있습니다 :

+1

아하, 그게 도움이. 제가 찾고 있던 것은 [호너의 방법] (http://en.wikipedia.org/wiki/Horner's_method)입니다. 아이디어는 1 + x + y + x^2 + y^2 + x y를 계산하는 대신 1 + y (1 + y) + x (1 + x + y)를 계산합니다. – marius

0

기능은 가장 안쪽 루프에 현재 속도 병목 현상입니다.

NumPy를 사용하고 더 높은 차원의 배열로 변수를 바꾸면 루프를 완전히 없앨 수 있습니다.

+0

좋은 생각이지만 x, y 등의 다음 값을 알지 못합니다. 함수를 평가할 때까지는 벡터화 할 수 없습니다. – marius