【发布时间】:2017-09-22 06:28:18
【问题描述】:
对于具有特征值eigval 和特征向量eigvec 的给定矩阵A,这是我想要做的:
- 找到多重性 > 1 的特征值
- 找到对应的特征向量。对这些特征向量进行一些计算
- 创建
eigvec,用这些新向量替换旧向量
最重要的是,如果有 2 个退化的特征值集,每个特征值的重数为 3,我希望这两组特征向量分别处理。 到目前为止,这是我尝试过的:
import numpy as np
import numpy.linalg as linalg
A = [[1,0,0], [0, 1, 0], [6, 7, 3]]
eigval, eigvec = linalg.eig(A)
idx = eigval.argsort()[::-1]
eigval = eigval[idx]
eigvec = eigvec[:,idx]
unique, counts,indices = np.unique(eigval,return_counts=True,return_index=True)
uni_count = dict(zip(counts, indices))
qr_counter = []
for key,val in uni_count.items():
if val > 1:
qr_counter.append(key)
print('For the dict: the key is the index, the value is mulplicity')
non_unique_eigvec = np.empty((len(qr_counter),), dtype=object)
for int in qr_counter:
np.concatenate(non_unique_eigvec, eigvec[int])
现在的问题是 eigvec 是 np 数组,我不知道如何修改它。
任何帮助将不胜感激!谢谢!
【问题讨论】:
-
您能解释一下您希望如何“修改”特征向量吗?您只是想将它们乘以一个常数?通常,numpy 数组被设计为立即操作,就好像它是单个值一样,并且所述操作将按元素执行。尽管它确实取决于数组的确切结构。进一步解释一下,我可能会写一个答案。编辑:据我所知,到目前为止,您的代码看起来还不错。这里有什么地方崩溃了吗?
-
不,我实际上想对特征向量进行 QR 因式分解。对于退化特征值,特征向量不是正交的,我正在尝试强力修复它(任何其他想法都值得赞赏!)。我收到 TypeError: TypeError: only integer scalar arrays can be convert to a scalar index
-
这个错误我很熟悉;如果不是在上面,我们能看到导致它的代码行吗?
-
不,这就是一切,连接导致错误。
-
我 99% 确定我知道出了什么问题,但我想先重现这个,并且这段代码不完整(
A未定义)。你能补充一下吗?
标签: python python-2.7 numpy eigenvalue eigenvector