同情矩阵真的那么慢吗?

时间:2017-08-21 12:08:29

标签: python numpy sympy

我只是看了一眼同情,看起来它非常慢。 我做错了吗?

from sympy.matrices import zeros
from time import time
import numpy as np

t = time()
M = zeros(500,500)
print("Time", time()-t)

t = time()
M = np.zeros((500,500))
print("Time", time()-t)

Sympy需要1.2s,numpy需要0.0006s。 这里什么也没发生。需要这么长时间?

修改 我真正想要的是一个库,我可以在小数值上使用快速矩阵填充(高斯消除,乘法)而不会丢失精度。我现在使用来自python的dtype=objectFraction numpy。它不是超级快但比这更好;)

1 个答案:

答案 0 :(得分:6)

Sympy ,正如其名称所示是符号数学的包,即(强调我的):

  

[...]一个科学领域,指的是研究和开发用于操纵数学表达式和其他数学对象的算法和软件

     

Wikipedia

因此, Sympy 未针对矩阵计算进行优化。

正如@Michelle在评论中指出的 SymPy 矩阵是象征性的;每个条目(甚至为零)都是 SymPy 对象,确切地说是sympy.core.numbers.Zero

另外,如果查看源代码, Sympy 是一个纯Python包,而 Numpy 有超过50%的代码库是用C语言编写的。这可能解释了您注意到 Sympy 的性能问题。