在 Python 中计算 Fiedler 向量

Posted

技术标签:

【中文标题】在 Python 中计算 Fiedler 向量【英文标题】:Computing the Fiedler Vector in Python 【发布时间】:2012-06-07 02:40:45 【问题描述】:

如何在 Python 中找到拉普拉斯算子 (L) 的外场向量?

我可以使用以下方法获取特征值和特征向量: 特征值,特征向量 = linalg.eig(L)

我假设 python 不会按顺序返回特征值。

我是否取第二大特征值,然后将其与相应的特征向量匹配(在索引中匹配)?

在对特征值排序时,如何处理负值?是按绝对量级排序吗?

感谢您的帮助

【问题讨论】:

快速解决方案,evals,evec = np.linalg.eigh(L) ind = np.argsort(evals) evals = evals[ind] evec = evec[:,ind] fiedler = evec[:,1] 连通性 = evals[1] 【参考方案1】:

嗯,我不知道所涉及的数学,但我会尽力而为。

如果您检查documentation,linalg.eig 实际上会以与其对应特征值相同的顺序返回特征向量。

我可能会这样做:

w, v = linalg.eig(L)
seen = 
unique_eigenvalues = []
for (x, y) in zip(w, v):
    if x in seen:
        continue
    seen[x] = 1
    unique_eigenvalues.append((x, y))
fiedler = sorted(unique_eigenvalues)[1][1]

默认情况下,Python 按第一个元素对元组进行排序,然后是第二个,依此类推,并且数字按照您期望的方式排序(-2

另外,我假设可能存在重复的特征值,并且 Fiedler 向量是与第二小的唯一特征值相关联的特征向量。

【讨论】:

快速解决方案evals,evec = np.linalg.eigh(L)ind = np.argsort(evals)evals = evals[ind]evec = evec[:,ind] @HirakSarkar 我对 numpy 不是很熟悉,evec[:,ind] 在做什么?我认为这在任何情况下都不正确,fiedler 向量是与第二小的 unique 特征值相关联的特征值。除非您以某种方式跳过重复项,否则这是行不通的。 我只是根据特征值对向量进行了排序,所以这里没有找到fiedler向量。但是,一旦您对向量进行了相应的排序,这很容易。 不确定这是否正确,根据定义,费德勒向量和应该等于0。【参考方案2】:

只是一个额外的解决方案:

import numpy as np
import scipy.linalg as la

eig_values, eig_vectors = la.eig(laplacian)
fiedler_pos = np.where(eigvalues.real == np.sort(eig_values.real)[1])[0][0]
fiedler_vector = np.transpose(eig_vectors)[fiedler_pos]

print("Fiedler vector: " + str(fieder_vector.real))

说明: Fiedler 向量具有最小的非零特征值。因此,我们需要对特征值进行排序,并取第二小的一个(顺便说一下,验证零元素是否也在第一位是有意义的)。这是在np.sort(eigvalues.real)[1] 中完成的,您可以看到已排序(实际)数组的第二个元素被采用。 现在我们只需要匹配原始数组中的值并获取它的位置。这可以通过np.where() 命令方便地完成。结果是括号中定义的所有已发现实例的数组,我们从中取出第一个。 fiedler_pos 变量现在包含特征向量中的 fiedler 向量位置。 为了得到向量本身,一种方法是在相关位置使用转置的特征向量矩阵。

【讨论】:

以上是关于在 Python 中计算 Fiedler 向量的主要内容,如果未能解决你的问题,请参考以下文章

为啥matlab和python中的特征向量计算不匹配?

为啥用 numpy 计算 2×2 矩阵的特征向量会使我的 Python 会话崩溃?

在 python 中查找特征值/向量的最快方法是啥?

python计算平面的法向-利用协方差矩阵求解特征值和特征向量

Python Pandas 和 SciPy:识别点和计算移动向量的最佳方法

python gensim使用word2vec词向量处理英文语料