python - numpy.linalg.eigh 适用于 sym.lambdify() 中的 numpy 数组,但不适用于 np.array()
问题描述
这是代码。2a 有效,但 2b 无效,即使两个矩阵具有相同的形状和相同的类型。谁能解释一下?
import sympy as sym
import numpy as np
x1, x2 = sym.symbols('x1 x2')
f = 2*x1**2 - 2*x1*x2 + x2**2 + 2*x1 - 2*x2
xk = np.array([[0 , 1]])
print("xk shape = ", xk.shape)
fmat = sym.Matrix([f])
H = sym.hessian(fmat, (x1, x2))
print("Symbolic H")
sym.pprint(H)
# 2a: Convert the SymPy Matrix to Numpy array using lambdify and then substitute values
Hnp = sym.lambdify((x1, x2), H, 'numpy')
Hknp = Hnp(xk[0][0], xk[0][1])
print("Hknp")
sym.pprint(Hknp)
print("Hknp type:", type(Hknp))
print("Hknp shape = ", Hknp.shape)
v, Q = np.linalg.eigh(Hknp)
print("v:", v)
print("Q:")
sym.pprint(Q)
# 2b: Substitute values into SymPy Matrix then convert to Numpy array
Hks = H.subs([(x1, xk[0][0]), (x2, xk[0][1])])
Hk = np.array(Hks)
print("Hk")
sym.pprint(Hk)
print("Hk type:", type(Hk))
print("Hk shape = ", Hk.shape)
v, Q = np.linalg.eigh(Hk)
print("v:", v)
print("Q:")
sym.pprint(Q)
解决方案
>>> Hk
array([[4, -2],
[-2, 2]], dtype=object)
>>> Hknp.dtype
dtype('int64')
解决办法是Hk = np.array(Hks, dtype=np.int64)
。
推荐阅读
- mysql - MYSQL:用团队中的顺序更新表
- asp.net-core - 如何解决缺少对 Ifragistics UI 的引用 - CS1061 编译器错误
- javascript - 如何使用 redux 管理表单状态并以多步骤形式做出反应?
- transactions - 电子商务应用程序的推荐事务隔离级别是多少?
- c# - 区分单击下拉列表三角形和单击其他任何位置的组合框
- python - 如何删除手部跟踪程序中的 Open cv 错误
- android - 当用户在flutter android / iOS应用程序中添加或更改购物车中商品的数量时如何更新购物车总数
- android - 在应用程序终止时接收来自 FCM 的推送通知
- python - 为什么我在 Python 回归分析中的执行时间存在巨大差异?
- python - 从 YAML 读取后 Python openCV 断言失败