import numpy as np
from scipy import linalg as linalg
M = np.array([[1,2],[2,1],[3,4],[4,3]])
Evals, Evecs = linalg.eigh(M.T.dot(M))
EvecShape = Evecs.shape
print Evals
print Evecs
ncols = EvecShape[1]
for i in range(ncols/2):
Evals[i], Evals[ncols-1-i] = Evals[ncols-1-i], Evals[i]
Evecs[:,i], Evecs[:,ncols-1-i] = Evecs[:,ncols-1-i], Evecs[:,i]
print Evals
print Evecs
我想计算MT*M的特征值和特征向量,并通过交换相应的列对特征值进行降序排序。结果如下:
[ 2. 58.]
[[-0.70710678 0.70710678]
[ 0.70710678 0.70710678]]
[ 58. 2.]
[[ 0.70710678 0.70710678]
[ 0.70710678 0.70710678]]
看来我确实在Evals中交换了元素。但对于爱唯客来说,显然有些地方出了问题。有人能告诉我这里发生了什么事吗
你正在尝试像二维数组一样对特征向量排序。不好的。使用特定的方法。在下面
代码的问题是,当您尝试交换列时,在读取第一列之前,会用另一列覆盖其中一列。这是因为数组切片(如果可能)不复制数据,而是引用被切片数组的缓冲区
你可以
.copy()
强制复制是的
或者
是的
相关问题 更多 >
编程相关推荐