同情心表现不佳

Phi*_*ann 2 python floating-point sympy

我在 Windows 8.1 (x64) 上使用 sympy 0.7.5(通过 pip 安装)和 Python 3.4.2。请考虑这个简短的程序:

import sympy
import time

start = time.time()
for i in range(100):
    sympy.Point(12345.0, 54321.0)
print('Elapsed (ms):', (time.time() - start) * 1000)
Run Code Online (Sandbox Code Playgroud)

我的机器大约需要22 秒才能执行此操作。我在这里缺少什么?

Ben*_*ier 5

sympy.Point当从浮点数生成s 时,它们会自动转换为有理数。这可能是一件好事(例如,如果您想避免浮点精度损失),但也可能非常(非常)慢。要禁用到Rationals pass的转换evaluate=False,例如

%timeit sympy.Point(12345., 54321.)
10 loops, best of 3: 31.8 ms per loop 

%timeit sympy.Point(12345., 54321., evaluate = False)
10000 loops, best of 3: 22.3 us per loop
Run Code Online (Sandbox Code Playgroud)