在Numpy中计算特征值无效:每个元素都是浮点数
我正在尝试计算一个矩阵的特征值,以便进行牛顿法优化。
我在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.]]))