orb*_*tal 5 python numpy linear-algebra
如何在Python中找到拉普拉斯算子(L)的守场员矢量?
我可以使用特征值得到特征值和特征向量:特征值,特征向量= linalg.eig(L)
我假设python没有按顺序返回特征值.
我是否采用第二大特征值,然后将其与相应的特征向量匹配(在索引中匹配)?
在订购特征值时,我该如何处理负值?按绝对量级排序?
谢谢你的帮助
只是一个额外的解决方案:
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))
Run Code Online (Sandbox Code Playgroud)
解释:费德勒向量具有最小的非零特征值。因此,我们需要对特征值进行排序,并取第二小的特征值(顺便说一句,验证零元素也位于第一位是有意义的)。这是在 中完成的np.sort(eigvalues.real)[1]
,您可以看到已排序(实际)数组的第二个元素已被取出。
现在我们只需要匹配原始数组中的值并获取它的位置即可。这可以通过np.where()
命令方便地完成。结果是括号中定义的所有已发现实例的数组,我们从中获取第一个实例。该fiedler_pos
变量现在包含特征向量中的费德勒向量位置。
为了获得向量本身,一种方法是在相关位置使用转置的特征向量矩阵。