Python-矩阵的点积在使用sympy和lambdify时似乎无法正常工作

2024-09-28 19:06:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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

有人遇到过类似的问题吗?有解决办法吗?你知道吗

先谢谢你。你知道吗


Tags: 代码文档importnumpyasmatrix数据处理aa
1条回答
网友
1楼 · 发布于 2024-09-28 19:06:49

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]]

相关问题 更多 >