Python-使用Sympy和Lambdify时,用于矩阵的点积似乎不起作用

时间:2018-12-14 14:45:22

标签: python numpy sympy lambdify

我正在用python实现数据处理流程。我正在尝试尽可能地使用符号计算(sympynumpy),以使代码与代码清晰一致。因此,当我尝试获取点积并将其用于实矩阵(通过lambdify)时,我得到了其他东西:

import numpy as np
from sympy import *
init_printing()

A = Matrix([[1, 2], [1, 100]])
B = Matrix([[3, 4], [10, 1000]])
AA = MatrixSymbol('A',2,2)
BB = MatrixSymbol('B',2,2)
mulab = lambdify([AA,BB],AA*BB)
print(mulab(A,B))
print(A*B)

给予

[7, 1010, 406, 100020]
Matrix([[23, 2004], [1003, 100004]])

Link to the live version of code

有人遇到过类似的问题吗?有已知的解决方法吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

lambdify创建一个应在NumPy数组上使用的函数。如果将SymPy对象传递给此函数,则所得的行为是不确定的。如果要在SymPy表达式上求值SymPy表达式,只需使用SymPy表达式,并用subs替换表达式。

>>> (AA*BB).subs({AA: A, BB: B}).doit()
⎡ 23    2004 ⎤
⎢            ⎥
⎣1003  100004⎦

如果您有NumPy数组,那就是您要使用lambdify:

>>> mulab(np.array([[1,2],[1,100]]), np.array([[3,4],[10,1000]]))
 [[    23   2004]
 [  1003 100004]]