簡體   English   中英

加快Python中簡單多項式表達式的求值速度

[英]Speed up evaluation of simple polynomial expression in Python

我編寫了一個相當大的Python程序來對以三次貝塞爾曲線樣條列表形式給出的數據進行一些分析。 這很慢,而且讓我感到驚訝的是,在進行性能分析后,我發現大部分時間都花在了以下非常簡單的功能上。

    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)

如果將**替換為*並分解多項式,例如:

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倍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM