同情矩阵真的那么慢吗?

Wik*_*nia 4 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)
Run Code Online (Sandbox Code Playgroud)

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

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

fil*_*ton 6

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

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

维基百科

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

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

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