[英]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.