【发布时间】:2021-11-17 12:20:55
【问题描述】:
我正在尝试生成 hessian 矩阵的逆矩阵并遇到问题。我将梯度和 hessian 矩阵都定义为具有变量 x1 和 x2 的函数,以便在未来的迭代中使用不同的值。这些函数工作正常,但是当我尝试取反时,它返回以下内容:
import numpy as np
#Rosenbrock Function
def f(x1, x2):
return 100*(x2-x1**2)**2+(1-x1)**2
#Define Gradient of f
def gradf(x1,x2):
return np.array([[-400*x1*(x2-x1**2)-2*(1-x1)],[200*(x2-x1**2)]])
#Define Hessian Matrix of f
def hessf(x1,x2):
return np.array([[-400*x2+1200*x1**2+2 , -400*x1],[-400*x1 , 200]])
#Inverse of Hessian Matrix
def hessf_inv(x1, x2):
return np.linalg.inv(hessf)
print(hessf_inv(1,1))
---------------------------------------------------------------------------
LinAlgError Traceback (most recent call last)
<ipython-input-114-67de06090dbe> in <module>
2 def hessf_inv(x1, x2):
3 return np.linalg.inv(hessf)
----> 4 print(hessf_inv(1,1))
<ipython-input-114-67de06090dbe> in hessf_inv(x1, x2)
1 #Inverse of Hessian Matrix
2 def hessf_inv(x1, x2):
----> 3 return np.linalg.inv(hessf)
4 print(hessf_inv(1,1))
<__array_function__ internals> in inv(*args, **kwargs)
~\Anaconda3\lib\site-packages\numpy\linalg\linalg.py in inv(a)
537 """
538 a, wrap = _makearray(a)
--> 539 _assert_stacked_2d(a)
540 _assert_stacked_square(a)
541 t, result_t = _commonType(a)
~\Anaconda3\lib\site-packages\numpy\linalg\linalg.py in _assert_stacked_2d(*arrays)
194 for a in arrays:
195 if a.ndim < 2:
--> 196 raise LinAlgError('%d-dimensional array given. Array must be '
197 'at least two-dimensional' % a.ndim)
198
LinAlgError: 0-dimensional array given. Array must be at least two-dimensional
这不是 numpy 的功能吗?任何帮助将不胜感激。
【问题讨论】:
标签: python arrays numpy matrix