如何解决Numpy eigh 崩溃 - 意外结果
我有一个图的邻接矩阵,然后我将图的拉普拉斯矩阵 (https://en.wikipedia.org/wiki/Laplacian_matrix) 构建为 L = D - A
,其中 D 是度矩阵,A 是图的邻接矩阵.
数据: https://filebin.net/v9ksmt3loy3xt7g3
代码:
from scipy.io import loadmat
import numpy as np
import matplotlib.pyplot as plt
X = np.array(loadmat('/Users/sera/Downloads/113922_TCS_Glasser360.mat')['TCS'])
# build adjacency
X = stats.zscore(X,axis=1)
u,l = 0.0,0.0
Xu,Xl = np.zeros((X.shape),dtype=np.float64),np.zeros((X.shape),dtype=np.float64)
Xu[X >= u] = X[X >= u]
Xl[X <= l] = X[X <= l]
Ac = (np.dot(Xu,Xu.T) + np.dot(Xl,Xl.T) ) / (Xu.shape[1]-1.)
np.fill_diagonal(Ac,0.0)
# plot the adjacency
plt.imshow(Ac);plt.colorbar()
# build laplacian
D = np.diag(np.sum(Ac,axis=1))
L = D - Ac
# eigh
l,v = np.linalg.eigh(L)
i = l.argsort() # sorting
l,v = l[i],v[:,i]
# scree plot of eigenvalues
plt.plot(l[:],'o-')
# plot first eigenvector -should be constant
plt.plot(v[:,0])
# Sanity check 1: plot fiedler vector -- should be smooth
plt.plot(v[:,1])
# Sanity check 2: it must be $ L v[:,i] -\lambda v[:,i] = 0 $ for every $i$
ii=1;
plt.plot(np.dot(L,ii]) - l[ii]*v[:,ii])
plt.plot(v[:,1])
返回:
很明显,尖峰和这个特征向量是算法崩溃的产物。
为什么会这样?我该如何解决这个问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。