numpy .linalg.eigh работает с массивом numpy из sym.lambdify (), но не из np.array () - PullRequest
1 голос
/ 27 мая 2020

Вот код. 2а работает, а 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)  

1 Ответ

2 голосов
/ 27 мая 2020
>>> Hk
array([[4, -2],
       [-2, 2]], dtype=object)


>>> Hknp.dtype
dtype('int64')

Решение Hk = np.array(Hks, dtype=np.int64).

...