【问题标题】:Python - Dot product for matrices doesn't seem to work when using sympy and lambdifyPython - 使用 sympy 和 lambdify 时,矩阵的点积似乎不起作用
【发布时间】:2018-12-14 14:45:21
【问题描述】:

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

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

提前谢谢你。

【问题讨论】:

  • mulab(np.array([[1,2],[1,100]]), np.array([[3,4],[10,1000]])) 有效。
  • 确实!非常感谢。

标签: python numpy sympy lambdify


【解决方案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]]

【讨论】:

  • 感谢您的解释。对我来说,使用 lambdify 创建的函数必须接受 NumPy 数组并不明显。如果需要,我认为它可以在内部转换参数。
猜你喜欢
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
相关资源
最近更新 更多