如何在Python的邻接矩阵中识别三合会,4个或更多的组

问题描述

所以我确实有一个邻接矩阵,并且正在寻找一个例程,该例程将标识三个,四个,五个等的组。

我遇到了以下帖子:How to efficiently calculate triad census in undirected graph in python,涉及一个非常相似的问题 非常喜欢Lomtrur提供的答案(2019年6月14日)。一旦我从Excel矩阵中创建字典字典,他/她的例程就可以完全满足三合会的需要。但是,我无法将该例程扩展到3个以上的小组(仅在我的同事的帮助下,我才设法为4个小组创建了效率很低的解决方案),也无法直接联系Lomtrur,因为我无法评论他的职位,因为我没有足够的声誉分-因此这个问题。

如果我们想象一个非常简单的0/1矩阵(在我的例子中为Excel),尺寸为5x5(行A,B,C,D,E;列A,B,C,D,E),其中所有节点是0并且只有以下节点是1 ::(A,B),(A,C),(A,E),(B,A),(B,C),(B,E),(C,A ),(C,B),(C,E),(E,A),(E,B),(E,C),我可以使用以下命令将其转换成Python中的字典:

   my_dictionary = pd.read_excel('file.xlsx',index_col=0)
   g = nx.from_pandas_adjacency(my_dictionary)
   _m = nx.convert.to_dict_of_dicts(g)

给我

_m = {'A': {'B': {},'C': {},'E': {}},'B': {'A': {},'C': {'A': {},'B': {},'D': {},'E': {'A': {},'C': {}}}

或者:

_m {'A': {'B': {'weight': 1},'C': {'weight': 1},'E': {'weight': 1}},'B': {'A': {'weight': 1},'C': {'A': {'weight': 1},'B': {'weight': 1},'E': {'A': {'weight': 1},'C': {'weight': 1}}}

运行来自Lomtrur的代码,这会散出以下三元组/三组:{('A','B','E'),('A','B','C'),( 'A','C','E'),('B','C','E')}},因为显然A既与B连接,又与E连接,而E同时与B连接,三角形/三合会。其他三个三合会也是如此。

尽管如此,这里也有四个(“ A”,“ B”,“ C”,“ E”)组,因为该组的所有“成员”也都作为二元组连接。 A与B,C,E有直接链接,B与A,C,E等都有直接链接。我想问的是,有人是否会那么友善,并帮助我扩展帖子中的代码链接到上面,这样例程就不仅可以识别三人组,还可以识别四,五个或更多成员的组?!

非常感谢您, 如果需要,我很乐意提供更多详细信息!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...