图的结构与动力学

stdog的Python项目详细描述


图的结构与动力学(Beta)

StDoG的主要目标是提供一个可用于学习的软件包 具有大的图的动力学和结构性质(如谱) 顶点数。StDoG的模块正在由 结合代码写在^ {EM1}$TunSoSoalsEEM> +^ {EM1}$CUDA ^ {EM1}$C++ +EEM>。在

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()

kpm

通过随机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 PeronBruno 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)。在

责任作者

@devmessias@tkdmperon

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java操作数组上的字符串   java JAXB内容未实例化   图形在Java中如何绘制垂直居中的字符串?   java Apache Ant:使用Junit时出现NoClassDefFoundError   java无法从服务器上运行perl脚本   如何在java中沿树进行预排序遍历,并打印0和1以对应每个节点上的特定字符?   java如何创建。p12文件?   java线程访问无效   java只匹配命名空间中的XML节点,而不知道NS前缀   从java获取2d arraylist元素   数组Java动态集合对象   java Xpath通过通配符或布尔运算查找以相同名称开头的节点?   java注释元素类型   java在中看不到Super()。反编译后的类文件