对于给定的矩阵a,其eigevalueseigval
和eigevectorseigvec
,我想做的是:
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.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中已经是一个重要的关键字相关问题 更多 >
编程相关推荐