繁体   English   中英

如何在numpy中使用特征分解?

[英]How to use the eigen decomposition in numpy?

在下面的算法中,权重是一个 2017x2017 的秩为 7 的对称矩阵。

我正在尝试对特征分解的列做一些事情,但是我什至无法让它们与原始矩阵相加。 neoweights1 = 权重,但 neoweights = 完全不同的东西。 这里有什么错误?

w,v = np.linalg.eig(weights)

neoweights1 = w2 * (v2 @ v2.T)
neoweights = np.zeros((matsize,matsize))
for i in range(7):
    neoweights += np.real(w2[i] * (v2[i] @ v2[i].T))

您的示例没有显示 w2 和 v2 的来源,但我猜它们也是 np.linalg.eig 的结果。 在这种情况下,请注意 v2 中的每一列都是一个特征向量。 但是v2[i]给了你一行。

接着, v2[i] @ v2[i].T是向量点积,意思是整个表达式neoweights += np.real(w2[i] * (v2[i] @ v2[i].T))只需为矩阵的每个元素添加一个标量值。

这就是你想要的:

neoweights = sum(np.real(np.outer(w[i] * v[:,i], v[:,i])) for i in range(7))

对于矩阵表达式,您必须小心何时以及如何与权重相乘。 这应该工作: np.real(w * v @ vT)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM