2016-08-08 75 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。 –