我正在用python实现数据处理流程。我正在尝试尽可能地使用符号计算(sympy
和numpy
),以使代码与代码清晰一致。因此,当我尝试获取点积并将其用于实矩阵(通过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
有人遇到过类似的问题吗?有已知的解决方法吗?
谢谢。
答案 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]]