图的结构与动力学
stdog的Python项目详细描述
图的结构与动力学(Beta)
StDoG的主要目标是提供一个可用于学习的软件包
具有大的图的动力学和结构性质(如谱)
顶点数。StDoG的模块正在由
结合代码写在^ {EM1}$TunSoSoalsEEM> +^ {EM1}$CUDA
1-安装
pip install stdog
2-示例
2.1-动力学
2.1.1-Kuramoto
Tensorflow
^{pr2}$fromstdog.dynamics.kuramotoimportHeunsheuns_0=Heuns(adj,phases,omegas,couplings,total_time,dt,device="/gpu:0",# or /cpu:precision=precision,transient=transient)heuns_0.run()heuns_0.transient=Trueheuns_0.total_time=total_time_transientheuns_0.run()order_parameter_list=heuns_0.order_parameter_list# (num_couplings, total_time//dt)
importmatplotlib.pyplotaspltr=np.mean(order_parameter_list,axis=1)stdr=np.std(order_parameter_list,axis=1)plt.ion()fig,ax1=plt.subplots()ax1.plot(couplings,r,'.-')ax2=ax1.twinx()ax2.plot(couplings,stdr,'r.-')plt.show()
CUDA-比Tensorflow实现更快
如果CUDA可用。你可以安装另一个软件包, stdogpkg/cukuramoto(C)
pip install cukuramoto
fromstdog.dynamics.kuramoto.cuheunsimportCUHeunsascuHeunsheuns_0=cuHeuns(adj,phases,omegas,couplings,total_time,dt,block_size=1024,transient=False)heuns_0.run()heuns_0.transient=Trueheuns_0.total_time=total_time_transientheuns_0.run()order_parameter_list=heuns_0.order_parameter_list#
2.2光谱
光谱密度
核多项式方法[1]可以估计大型稀疏Hermitan矩阵的谱密度,计算量几乎是线性的。该方法结合了三个关键因素:Chebyshev展开+随机迹估计[2]+核平滑。在
importigraphasigimportnumpyasnpN=3000G=ig.Graph.Erdos_Renyi(N,3/N)W=np.array(G.get_adjacency().data,dtype=np.float64)vals=np.linalg.eigvalsh(W).real
importstdog.spectraasspectrafromstdog.utils.miscimportig2sparseW=ig2sparse(G)num_moments=300num_vecs=200extra_points=10ek,rho=spectra.dos.kpm(W,num_moments,num_vecs,extra_points,device="/gpu:0")
importmatplotlib.pyplotaspltplt.hist(vals,density=True,bins=100,alpha=.9,color="steelblue")plt.scatter(ek,rho,c="tomato",zorder=999,alpha=0.9,marker="d")plt.ylim(0,1)plt.show()
通过随机Lanczos求积(SLQ)得到的迹函数[3]
计算自定义跟踪函数
fromstdog.spectra.trace_functionimportslqimporttensorflowastfdeftrace_function(eig_vals):returntf.exp(eig_vals)num_vecs=100num_steps=50approximated_estrada_index,_=slq(L_sparse,num_vecs,num_steps,trace_function,device="/gpu:0")exact_estrada_index=np.sum(np.exp(vals_laplacian))approximated_estrada_index,exact_estrada_index
上面的代码返回
(3058.012, 3063.16457163222)
熵
importscipyimportscipy.sparsefromstdog.spectra.trace_functionimportentropyasslq_entropydefentropy(eig_vals):s=0.forvalineig_vals:ifval>0:s+=-val*np.log(val)returnsL=np.array(G.laplacian(normalized=True),dtype=np.float64)vals_laplacian=np.linalg.eigvalsh(L).realexact_entropy=entropy(vals_laplacian)L_sparse=scipy.sparse.coo_matrix(L)num_vecs=100num_steps=50approximated_entropy=slq_entropy(L_sparse,num_vecs,num_steps,device="/cpu:0")approximated_entropy,exact_entropy
(-509.46283, -512.5283224633046)
参考文献
1-Wang,L.W.,1994年。计算态密度和 大量子系统的平面波矩吸收光谱 方法。物理回顾B,49(15),第10154页。在
2-Hutchinson,M.F.,1990年。关于 拉普拉斯光滑样条的影响矩阵。通信 统计模拟与计算,19(2),433-450页。在
3-Ubaru,S.,Chen,J.和Saad,Y.(2017年)。利用随机Lanczos求积快速估计tr(f(A))。 暹罗矩阵分析与应用杂志,38(4),1075-1099。在
3-如何引用
Thomas Peron,Bruno Messias,angelicas.Mata,Francisco A. Rodrigues,和{a5}。关于无标度网络中Kuramoto振荡器同步的起始点。arXiv:1905.02256(2019年)。在
4-致谢
这项工作也得到了FAPESP拨款11/50761-2和2015/22308-2的支持。利用FAPESP资助的Formathematic Sciences Applied to Industry(CeMEAI)的计算资源进行研究(grant 2013/07375-0)。在
责任作者
- 项目
标签: