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 (将#修改为@)