微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Numpy eigh 崩溃 - 意外结果

如何解决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]) 返回:

Screenshot 2021-02-01 at 12 30 34

很明显,尖峰和这个特征向量是算法崩溃的产物。

为什么会这样?我该如何解决这个问题?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。