我遇到的问题与this question相同。
但是,我相信上述问题的答案并不适用于我的情况。
matrix = np.array([[10,3,1],[3,2,1],[1,1,1]])
eigenvalues, eigenvectors =np.linalg.eigh(matrix) # using eigh because matrix is symmetric matrix
print([np.dot((matrix@eigenvectors[i])/np.linalg.norm(matrix@eigenvectors[i]),eigenvectors[i]/np.linalg.norm(eigenvectors[i])) for i in range(matrix.shape[0])])
如果我是正确的,上面的代码应该返回1,等于矩阵的大小。当然,我假设由于错误,它不会正好是1,但它仍然应该接近1。
但是,上面的代码返回以下值:
[0.7721913042777805, 0.5341128829187937, 0.9019035049538643]
这个答案是不是太差了?
顺便说一下,如果我们在Wolfram Alpha中计算这个矩阵的特征向量,我得到:
[[ 0.12586458 -0.32039088 -0.93888646]]
[-0.65562141 0.68341326 -0.32110261]
[ [ 0.74452581 0.65596951 -0.1240376 ]]
将其代入特征向量并以相同的方式执行以下代码,
print([np.dot((matrix@eigenvectors[i])/np.linalg.norm(matrix@eigenvectors[i]),eigenvectors[i]/np.linalg.norm(eigenvectors[i])) for i in range(matrix.shape[0])])
获得以下结果:
[0.9999999999999705, 0.9999999999834726, 0.9999999999737305]
1条答案
按热度按时间f4t66c6m1#
Numpy正在正确计算特征向量,您可以通过使用print语句显示它们来验证它。问题是你取的特征向量不正确。使用eigh时,请确保采用特征向量矩阵的列,而不是像您当前所做的那样采用行。
解决方案如下:
做了这个小小的修改,我得到了预期的结果:
让我知道它是否有效:)