在Numpy中计算特征值无效:每个元素都是浮点数

1 投票
1 回答
940 浏览
提问于 2025-04-18 07:53

我正在尝试计算一个矩阵的特征值,以便进行牛顿法优化。

我在Eclipse的PyDev中使用的是Python 2.7.6。

这是从PyDev返回的变量(Hessian):

ndarray: [[ 0.01  0.  ]
[ 0.    1.  ]]

接下来的命令:

np.linalg.eig(Hessian)

返回了一个异常:

ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

我甚至尝试过将每个元素转换为浮点值,方法是逐个遍历每个元素并使用float函数。

编辑/更多信息:在插入print repr(Hessian)后,得到了以下结果。

array([[0.01, 0.0],
   [0.0, 1.0]], dtype=object)

1 个回答

1

根据你的评论,看起来这个矩阵不是一个numpy数组,这导致在使用numpy时出现了错误。

正如你提到的:

“也许是这个过程 Hessian[i,j]=diff(diff(function,x_i),x_j) 引起了麻烦。”

我也无法重现你的错误。

对于一个简单的缩放变换矩阵 [[0.01, 0.], [0., 1.]],它的特征向量很明显就是标准基向量 [1,0][0,1],特征值分别是0.01和1。

相关的numpy模块在处理这个问题时没有任何问题,所以错误可能出在其他地方。

>>> import numpy as np
>>> M = np.array([[0.01,0.],[0.,1.]])
>>> M
array([[ 0.01,  0.  ],
       [ 0.  ,  1.  ]])
>>> np.linalg.eig(M)
(array([ 0.01,  1.  ]), array([[ 1.,  0.],
       [ 0.,  1.]]))

撰写回答