【发布时间】:2019-10-23 09:11:50
【问题描述】:
我有一个方程,它有一个使用 Sympy 包命名的符号变量 a。使用这个变量我创建了一个 6 * 6 矩阵:
array([[1, exp(-0.04*a**2), exp(-0.16*a**2), exp(-0.36*a**2),
exp(-0.64*a**2), exp(-1.0*a**2)],
[exp(-0.04*a**2), 1, exp(-0.04*a**2), exp(-0.16*a**2),
exp(-0.36*a**2), exp(-0.64*a**2)],
[exp(-0.16*a**2), exp(-0.04*a**2), 1, exp(-0.04*a**2),
exp(-0.16*a**2), exp(-0.36*a**2)],
[exp(-0.36*a**2), exp(-0.16*a**2), exp(-0.04*a**2), 1,
exp(-0.04*a**2), exp(-0.16*a**2)],
[exp(-0.64*a**2), exp(-0.36*a**2), exp(-0.16*a**2),
exp(-0.04*a**2), 1, exp(-0.04*a**2)],
[exp(-1.0*a**2), exp(-0.64*a**2), exp(-0.36*a**2),
exp(-0.16*a**2), exp(-0.04*a**2), 1]], dtype=object)
上面的 a 变量是一个 sympy 符号。现在我想反转这个矩阵。使用 numpy 我得到以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-117-3c958037db81> in <module>()
----> 1 inv(np.array(final_result))
D:\datascience\lib\site-packages\numpy\linalg\linalg.py in inv(a)
526 signature = 'D->D' if isComplexType(t) else 'd->d'
527 extobj = get_linalg_error_extobj(_raise_linalgerror_singular)
--> 528 ainv = _umath_linalg.inv(a, signature=signature, extobj=extobj)
529 return wrap(ainv.astype(result_t, copy=False))
530
TypeError: No loop matching the specified signature and casting
was found for ufunc inv
并使用 Sympy 自己的语法来反转这个矩阵,即 M ** -1,需要太长时间并且不会计算结果。 有没有办法使用numpy来反转这个矩阵?还是纯python语法?
【问题讨论】:
-
您能否提供复制错误所需的所有代码?您如何将数组转换为 Sympy 对象?你用什么代码来反转矩阵?
-
@DrBwts 我已经为此尝试了文档解决方案,它将矩阵供电到 -1
-
如果您正在寻找符号逆,您将需要使用 SymPy。 NumPy 只计算数值逆,它使用的算法不适用于符号矩阵。
标签: python numpy data-science sympy