尝试计算牛顿法优化矩阵的特征值。
在 PyDev for Eclipse 中使用 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)
最佳答案
根据您的评论,矩阵似乎不是 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.]]))
关于python - 在 Numpy 中计算特征值不起作用 : Each element is a float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23924281/