python - Python - 使用 sympy 和 lambdify 时,矩阵的点积似乎不起作用
问题描述
我正在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]])
有没有人遇到过类似的问题?是否有已知的解决方法?
先感谢您。
解决方案
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]]
推荐阅读
- python - 每次使用 Django 时如何设置它?(即使用 **source bin/activate** 和 ** python manage.py runserver**)
- android - Log.d 语句未执行
- windows - Microsoft Store 上的 AB 测试
- python - Visual Studio 2019 Python 2.7 调试只打印第一个打印语句
- python - Python3 tkinter 批处理构建按钮
- python - 是否有 python 函数来扩展日期(类似于电源查询中的 List.Dates)?
- spring-integration - 将 spring 集成版本从 4.3.12 升级到 5.2.5 后,在 sftp outbound-gateway 中出现“没有此类文件”异常
- .htaccess - 有没有办法重写 url 中的哈希字符 - htaccess
- long-integer - IAR 不能长线(80th)
- java - java.io.IOException:监听失败:EINVAL(无效参数)尝试保存到没有非法字符的公共下载文件夹时