【问题标题】:python: Modifying eigenvectors based on multiplicity of eigenvaluespython:根据特征值的多重性修改特征向量
【发布时间】:2017-09-22 06:28:18
【问题描述】:

对于具有特征值eigval 和特征向量eigvec 的给定矩阵A,这是我想要做的:

  1. 找到多重性 > 1 的特征值
  2. 找到对应的特征向量。对这些特征向量进行一些计算
  3. 创建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


【解决方案1】:

您的错误的解决方案非常简单。如果您查看documentationnumpy.concatenate(),您会看到输入参数是:

1.) 要连接的数组的序列

2.) 要连接的轴

所以要连接的数组必须简单地放入一个序列中并作为单个对象传递给concatenate()。所以,

np.concatenate( (non_unique_eigvec, eigvec[int]) )

而不是

np.concatenate(non_unique_eigvec, eigvec[int]).

您传递了一个数组 (eigvec[int]) 来代替一个预期为整数的参数(第二个参数 - 轴)。

虽然,一旦固定,这会产生数组

array([None, 0.0, 0.274721127897378, 0.0], dtype=object)

我怀疑这是你想要的?

最后,您应该在较低的for 循环中更改变量int 的名称,因为int 在Python 中已经是一个重要的关键字

【讨论】:

    猜你喜欢
    • 2014-05-11
    • 1970-01-01
    • 2018-12-30
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2019-04-27
    相关资源
    最近更新 更多