简介

冯·诺依曼图熵(VNGE)有助于测量图序列中图之间的信息差异和距离。

给定第一个无向图 G=(V,E,A)G=(V, E, A)G=(V,E,A), 其中 AAA 是对称的邻接矩阵。 度矩阵定义为 D=diag(d1,...,dn)D=diag(d_1,...,d_n)D=diag(d1​,...,dn​),则它的拉普拉斯矩阵为 L=D−AL=D-AL=D−A。其中后者的特征值 λi\lambda_iλi​ 被称为拉普拉斯谱。 这里,Hvn(G)H_{vn}(G)Hvn​(G) 为冯诺依曼图熵(von Neumann graph entropy)。

Hvn(G)=−∑i=1n(λivol(G)log⁡λivol(G))H_{vn}(G)=-\sum \limits_{i=1}^{n}(\frac{\lambda_i}{vol(G)}\log\frac{\lambda_i}{vol(G)})Hvn​(G)=−i=1∑n​(vol(G)λi​​logvol(G)λi​​)

图的容量为 vol(G)=∑i=1nλi=trace(L)vol(G)=\sum_{i=1}^{n}\lambda_i=trace(L)vol(G)=∑i=1n​λi​=trace(L)。时间复杂度较高,是 O(n3)O(n^3)O(n3)。

我提供了Python版本代码来计算VNGE。应该注意的是陈等人给出了一种称为FINGER [1]的近似方法,该方法将VNGE的三次复杂度降低为节点和边的数量的线性复杂度。

VNGE和FINGER的代码如下。

代码

# Name: VNGE
# Author: Reacubeth
# Time: 2021/1/25 16:01
# Mail: noverfitting@gmail.com
# Site: www.omegaxyz.com
# *_*coding:utf-8 *_*import time
import numpy as np
from scipy.sparse.linalg.eigen.arpack import eigshdef normalized_laplacian(adj_matrix):nodes_degree = np.sum(adj_matrix, axis=1)nodes_degree_sqrt = 1/np.sqrt(nodes_degree)degree_matrix = np.diag(nodes_degree_sqrt)eye_matrix = np.eye(adj_matrix.shape[0])return eye_matrix - degree_matrix * adj_matrix * degree_matrixdef unnormalized_laplacian(adj_matrix):nodes_degree = np.sum(adj_matrix, axis=1)degree_matrix = np.diag(nodes_degree)return degree_matrix - adj_matrixdef VNGE_exact(adj_matrix):start = time.time()nodes_degree = np.sum(adj_matrix, axis=1)c = 1.0 / np.sum(nodes_degree)laplacian_matrix = c * unnormalized_laplacian(adj_matrix)eigenvalues, _ = np.linalg.eig(laplacian_matrix)eigenvalues[eigenvalues < 0] = 0pos = eigenvalues > 0H_vn = - np.sum(eigenvalues[pos] * np.log2(eigenvalues[pos]))print('H_vn exact:', H_vn)print('Time:', time.time() - start)def VNGE_FINGER(adj_matrix):start = time.time()nodes_degree = np.sum(adj_matrix, axis=1)c = 1.0 / np.sum(nodes_degree)edge_weights = 1.0 * adj_matrix[np.nonzero(adj_matrix)]approx = 1.0 - np.square(c) * (np.sum(np.square(nodes_degree)) + np.sum(np.square(edge_weights)))laplacian_matrix = unnormalized_laplacian(adj_matrix)'''eigenvalues, _ = np.linalg.eig(laplacian_matrix)eig_max = c * max(eigenvalues)'''eig_max, _ = eigsh(laplacian_matrix, 1, which='LM')eig_max = eig_max[0] * cH_vn = - approx * np.log2(eig_max)print('H_vn approx:', H_vn)print('Time:', time.time() - start)nodes_num = 3000
sparsity = 0.01tmp_m = np.random.uniform(0, 1, (nodes_num, nodes_num))
pos1 = tmp_m > sparsity
pos2 = tmp_m <= sparsity
tmp_m[pos1] = 0
tmp_m[pos2] = 1
tmp_m = np.triu(tmp_m)
adj_m = tmp_m + np.transpose(tmp_m)VNGE_exact(adj_m)
VNGE_FINGER(adj_m)

结果

H_vn exact: 11.496599468152386
Time: 13.172455072402954
H_vn approx: 10.63029083591871
Time: 0.23734617233276367

[1] Chen, Pin-Yu, et al. “Fast incremental von neumann graph entropy computation: Theory, algorithm, and applications.” International Conference on Machine Learning. PMLR, 2019.

更多内容访问 omegaxyz.com
网站所有代码采用Apache 2.0授权
网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2021 • OmegaXYZ-版权所有 转载请注明出处

冯诺依曼图熵(VNGE)Python实现及近似计算相关推荐

  1. python画聚类树状图_影像组学学习笔记(36)-聚类树状图Dendrogram的python实现

    本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(36)主要介绍: 聚类树状图Dendrogram的python实现 应该注意一下scipy版本的问题:scipy 1.5.0版本画聚类树 ...

  2. python以图搜图_以图搜图(一):Python实现dHash算法(转)

    近期研究了一下以图搜图这个炫酷的东西.百度和谷歌都有提供以图搜图的功能,有兴趣可以找一下.当然,不是很深入.深入的话,得运用到深度学习这货.Python深度学习当然不在话下. 这个功能最核心的东西就是 ...

  3. 图卷积神经网络 | Python实现基于GCN-GRU图卷积门控循环单元网络模型

    图卷积神经网络 | Python实现基于GCN-GRU图卷积门控循环单元网络模型 目录 图卷积神经网络 | Python实现基于GCN-GRU图卷积门控循环单元网络模型 效果分析 基本描述 模型结构 ...

  4. python画画用哪个软件_如何用python画韦恩图? 使用python的tutul工具,画一朵雏菊花...

    使用python的tutul工具,画一朵雏菊花 如何用python画韦恩图?不管什么时候,给心留一点空间.人生一世,不用什么都要去争,不是什么都要去抢,欲望少一点,满足多一点,这样才会活得潇洒一点,人 ...

  5. Python实践:画个动图玩玩,Python绘制GIF图总结

    Python实践:画个动图玩玩,Python绘制GIF图总结 文章目录 Python实践:画个动图玩玩,Python绘制GIF图总结 具体实现 Python代码 参考资料 上期博客< Pytho ...

  6. 数据可视化之饼状图(原理+Python代码)

    数据来源于Kaggle数据集,链接:https://www.kaggle.com/Cornell-University/arxiv 目录 00.前言 一.原理介绍 二.代码实现 三.结果解释 00.前 ...

  7. 【适合Python语言小白的股价图】利用Python中的matplotlib绘制股价图(非k线图)

    [适合Python语言小白的股价图]利用Python中的matplotlib绘制股价图(非k线图) 代码小白,最近做一家公司的股价复盘用到了matplotlib,在此做个小小的记录.代码的逻辑比较笨, ...

  8. 30行代码就可以实现看图识字!python使用tensorflow.keras搭建简单神经网络

    文章目录 搭建过程 1. 引入必需的库 2. 引入数据集 3. 搭建神经网络层 4. 编译神经网络模型 5. 训练模型 效果测试 大概几个月前,神经网络.人工智能等概念在我心里仍高不可攀,直到自己亲身 ...

  9. 用python画爱心动图_编写Python爬虫抓取暴走漫画上gif图片的实例分享

    本文要介绍的爬虫是抓取暴走漫画上的GIF趣图,方便离线观看.爬虫用的是python3.3开发的,主要用到了urllib.request和BeautifulSoup模块. urllib模块提供了从万维网 ...

  10. python画折线图代码-用Python画论文折线图、曲线图?几个代码模板轻松搞定!

    前言 这几天在搞论文图,唉说实话抠图这种东西真能逼死人.坐在电脑前抠上一天越看越丑,最后把自己丑哭了-- 到了画折线图分析的时候,在想用哪些工具的时候.首先否决了excel,读书人的事,怎么能用exc ...

最新文章

  1. 5.3.2 计算机网络传输层之TCP流量控制
  2. matlab 同一坐标系 散点图 t,matlab上机练习
  3. 暑期训练日志----2018.8.7
  4. (转)Apache 中 KeepAlive 配置的合理使用
  5. spring整合jedis(单节点)
  6. JavaScript学习(四十三)—构造方法创建对象的图解和注意事项
  7. sql查询禁用缓存_如何在SQL Server 2017中启用和禁用身份缓存
  8. OpenCV精进之路(十五):特征检测和特征匹配方法汇总
  9. UG模具设计工程师需要哪些条件?潇洒UG模具设计
  10. php实现三级导航栏效果
  11. 大数据面试题知识点分析(十一)之Flume面试真题及答案
  12. 音视频开发系列(6)视频码率,帧率和分辨率
  13. UFS系列三:UFS数据包UPIU
  14. 区块链骇客第二讲: 自毁攻击
  15. R语言windows函数自动生成可视化图像画布框、使用plot函数可视化数据点图、使用type参数指定数据点为实线
  16. ccc加拿大计算机竞赛在线评测系统,加拿大计算机竞赛简介
  17. 只会用Excel吗?这套全面的数据分析工具打包送你,拿走不谢
  18. C++排序求最值函数的调用
  19. 鸿蒙系统拟物化图标,那些让人不得不吐槽的软件设计风格
  20. 2020-2021广东省“网络安全管理与评估”竞赛培训专题-1、赛项分析与比较

热门文章

  1. python中的超类_Python中的抽象超类
  2. (秒杀项目) 4.7 缓存商品与用户
  3. 服务器不稳定补偿,《异化之地》服务器异常怎么解决 服务器不稳定官方补偿...
  4. Javascript:forEach、map、filter、reduce、reduceRight、find、findIndex、keys、values、entries、every、some的使用
  5. Java编程:树(实际应用)
  6. Git:取消合并方式
  7. 设计模式(13)——构建者模式(Builder)
  8. 2021 CVPR | 基于渐进感受局部区域推理的全方位监督点云分割
  9. JSON 解析之 FastJson
  10. python-appium520-2初步使用