python:基于特征值多重性修改特征向量

2024-09-22 16:23:41 发布

您现在位置:Python中文网/ 问答频道 /正文

对于给定的矩阵a,其eigevalueseigval和eigevectorseigvec,我想做的是:

  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数组,我不知道如何修改它。在

任何帮助都将不胜感激!谢谢!在


Tags: thekeynpcounter向量qruniquecounts
1条回答
网友
1楼 · 发布于 2024-09-22 16:23:41

你的错误的解决办法很简单。如果您查看numpy.concatenate()documentation,您将看到输入参数是:

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中已经是一个重要的关键字

相关问题 更多 >