python - 为什么我的图不是二分的,以为我使用相应的 networkx 函数将它们创建为二分的?
问题描述
我写了一个函数:
B = nx.Graph()
B.add_nodes_from([1, 2, 3, 4], bipartite=0)
B.add_nodes_from(["a", "b", "c"], bipartite=1)
B.add_edges_from([(1, "a"), (1, "b"), (2, "b"), (2, "c"), (3, "c"), (4, "a"), (1,2)])
layout = nx.bipartite_layout(B, [1, 2, 3, 4])
nx.draw_networkx(B, pos=layout)
如您所见,此图必须是二分图,但是我得到了:
1 和 2 已连接。所以,如果我可以使用 this 在它们之间添加边B.add_edges_from([(1, "a"), (1, "b"), (2, "b"), (2, "c"), (3, "c"), (4, "a"), (1,2)])
,那么拧这个有什么意义:B.add_nodes_from([1, 2, 3, 4], bipartite=0)
并指定它的二分?
解决方案
您已为节点分配了属性bipartite=0
或1
. 但是,这只是节点的一个属性。您可以为它们分配您想要的任何属性,任何名称(颜色、重量、物种名称等)——它对存在的边缘没有影响。特别是,没有特别注意属性的名称。您已经命名了一个属性'bipartite'
,但就 networkx 命令而言,您可以很容易地命名该属性'fubar'
。它不在乎。
您在节点 1 和 2 之间添加了一条边。Networkx 不会查看图形的属性并选择拒绝允许您要求它创建的边。
在您的情况下,我认为您的问题的答案是设置名为'bipartite'
.
推荐阅读
- c++ - 如何使用 CImg 加载图像的 CImg 检索色彩空间?
- c# - 通过 PreSignedURL 访问 AWS S3 上的文件时出现异常
- php - 使用带有 codeigniter 的 smtp 向 2 个具有不同消息的收件人发送电子邮件
- xml - 如何可视化 DocBook 文件?
- fullcalendar - 使用 FullCalendar 想要在事件 A 更改时更改事件 B 的属性
- bash - 管道标准输出并为每行添加一些字符
- sonarlint-vs - 使用 Visual Studio 的 SonarLint
- excel-formula - 根据excel/google工作表中不同列的数字检索单元格文本
- sql - 如何在 MM-DD 上聚合多年的数据,忽略年份
- c# - 根据左侧的分隔符将字符串拆分为子字符串