2016-08-08 73 views
2

我有一個代碼讀取非結構化網格。我寫了圍繞sympy.geometry幾何實體,如包裝:sympy.geometry點類運行緩慢

class Point: 
    def __init__(self, x, y, parent_mesh): 
     self.shape = sympy.geometry.Point(x,y) 
     self.parent_mesh = parent_mesh 
     self.parent_cell = list() 

一切正常但sympy.geometry.Point初始化需要花費大量的時間對每個Point。實際上,代碼沒有完成數千個點的執行。用C++編寫的類似代碼在幾秒鐘內完成。沒有它的代碼是足夠快的(我刪除它並定時)。我讀到一個可能的原因可能是sympy.geometry將浮點數轉換爲有理精度。有沒有一種方法(國旗)加快sympy.geometry,因爲我不需要確切的精度?

回答

3

看一看的Point class documentation,具體地,在第一示例中的一個:

除非評估標誌爲False浮標被自動轉換爲理性。

所以,你可以在你的Point類的初始化過程中通過一個名爲evaluate標誌:

self.shape = sympy.geometry.Point(x,y, evaluate=False) 

這顯然標誌着你以後。

+1

是的這解決了這個問題。我應該更好地閱讀文檔。謝謝。 – Shibli

+0

雖然現在sympy.geometry.Triangle工作非常緩慢,在這種情況下沒有關於「評估」的內容。 – Shibli

+0

'Triangle'可以用3''Point'初始化,所以你可以做的最好的就是使這些點不轉換爲Rationals。 –