【问题标题】:Inverse Matrix with Variables带变量的逆矩阵
【发布时间】: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


    【解决方案1】:

    我想你忘了调用函数,此时你试图反转一个函数对象。

    def hessf_inv(x1, x2):
        return np.linalg.inv(hessf)
    

    改成:

    def hessf_inv(x1, x2):
        return np.linalg.inv(hessf(x1, x2))
    

    (注意x1x2 添加到hessf)。

    【讨论】:

      【解决方案2】:

      您没有将参数传递给 hessf_inv 函数内的 hessf 函数。函数必须是;

      def hessf_inv(x1, x2):
          return np.linalg.inv(hessf(x1,x2))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-21
        • 1970-01-01
        • 2021-01-25
        • 2019-02-08
        • 2019-01-27
        • 2010-09-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多