加速Python中简单多项式表达式的求值

时间:2015-04-12 03:45:58

标签: python performance python-2.7 svg bezier

我编写了一个相当大的Python程序来对以三次Bezier样条列表形式给出的数据进行一些分析。它非常缓慢,令我惊讶的是,在分析后我发现大部分时间花在了以下非常简单的功能上。

    def point(P0,P1,P2,P3,t):
        return ((1-t)**3 * P0) + \
               (3 * (1-t)**2 * t * P1) + \
               (3 * (1-t) * t**2 * P2) + \
               (t**3 * P3)

其中t是浮点数,P0,P1,P2和P3是复数。

我担心,尝试减少执行此功能的次数会让我很头疼并可能降低我的结果的准确性,所以在我尝试之前我想知道是否有人知道一个简单的加快这一进程的方法。

我听说过我可以编译它作为可以从我的python代码中调用的C / C ++函数,但我从来没有做过类似的事情(而且它已经被很长一段时间以来我一直使用C / C ++)所以我想在花时间潜入这样的事情之前获得专家意见。

另外,为了彻底,上面的函数实际上是一个名为svg.path的模块中Path类的方法。其确切的语法如下。

    def point(self, pos):
        """Calculate the x,y position at a certain position of the path"""
        return ((1-pos) ** 3 * self.start) + \
               (3 * (1-pos) ** 2 * pos * self.control1) + \
               (3 * (1-pos) * pos ** 2 * self.control2) + \
               (pos ** 3 * self.end)

1 个答案:

答案 0 :(得分:1)

如果您将**替换为*并将多项式因子设为:

def point(P0, P1, P2, P3, t):
    return P0 + \ 
        t * (3 * (P1 - P0) + \
        t * (3 * (P0 + P2) - 6 * P1 + \
        t * (-P0 + 3 * (P1 - P2) + P3)))

你的成绩几乎达到了2倍。