首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求矩阵和的顶特征值的Lanczos算法

求矩阵和的顶特征值的Lanczos算法
EN

Stack Overflow用户
提问于 2021-04-07 03:29:03
回答 1查看 235关注 0票数 0

我正在尝试寻找numpy矩阵的顶部k引导特征值(使用python点积表示法)。

L@L + a*Y@Y.T,其中L和Y分别是对称的nxn和nxd矩阵。

根据this论文的以下文本,我应该能够用L@(L@v) + a*X@(X.T@v)计算这些前导特征值,其中v是一个任意向量。他们引用的Lanczos论文是here

我知道scipy有scipy.sparse.linalg.eigsh here,从笔记上看它似乎使用了Lanczos算法--但我不知道是否可以在我的特定用例中使用sparse.linalg.eigsh。我用谷歌搜索了一下,没有很快找到一个Python实现--有人知道我是否可以使用sparse.linalg.eigsh以某种方式计算这个值吗?我绝对不想自己写这个算法。

EN

回答 1

Stack Overflow用户

发布于 2021-04-07 19:59:53

你可以查看scipy.sparse.linalg.eigsh

代码语言:javascript
复制
import numpy as np;
from scipy.sparse.linalg import eigsh;
from numpy.linalg import eigh
a = 1.4
n = 20;
d = 7;
# random symmetric n x n matrix
L = np.random.randn(n, n)
L = L + L.T

# random n x d matrix
Y = np.random.randn(n, d)

A = L @ L.T + a * Y @ Y.T # your equation

A必须是正定的才能使用eigsh,如果是a>0,这是肯定的。

您可以检查四个特征值,如下所示

代码语言:javascript
复制
eigsh(La, 4)[0]

作为参考,您可以基于计算所有特征值的numpy.linalg.eigh进行比较。对它们进行排序,并取排序数组的最后四个元素,结果应该是接近的。

代码语言:javascript
复制
np.sort(eigh(La)[0])[-4:]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66975311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档