【问题标题】:Is there a way to form connections between nodes based upon if they have shared attributes?有没有办法根据节点是否具有共享属性来形成节点之间的连接?
【发布时间】:2020-10-29 14:06:44
【问题描述】:

我的目标是编写一个程序,该程序以未连接的节点网络开始,每个节点可能具有相同或不同的属性。然后,如果节点具有共享属性,则将形成一条边。到目前为止,我已经浏览了网络包,似乎没有一种简单的方法可以实现这一点。如果有人对如何做到这一点有任何想法,我将非常感谢您的帮助!

import networkx as nx
import matplotlib.pyplot as plt
import random
know_list = ["a", "b", "c", "d"]
G = nx.Graph()
for i in range(1,5):
    G.add_node(i, knowledge = know_list[i-1])

#nx.draw(G)
#plt.show()
knowledge=nx.get_node_attributes(G, 'knowledge')
print(knowledge)

G.add_node(5, awareness = random.choices(know_list, k=2))
awareness = nx.get_node_attributes(G, 'awareness')
print(awareness)`

#返回节点5的感知字典后的目标是将感知字典中的内容与知识​​字典进行比较(注意get_node_attributes返回一个字典,其中节点作为键,know_list中的元素作为项目)。如果感知字典中的元素与节点的知识属性相同,则在两者之间添加一条边。例如,假设随机选择给出意识 = [a,b]。在这种情况下,节点 5 将与节点 1 和 2 形成连接,因为节点 1 具有 [a] 的知识,而节点 2 具有 [b] 的知识。但是,节点 5 不会与节点 3 或 4 形成连接,因为它们不是意识字典中包含的元素。我希望这能澄清一些事情,如果仍然令人困惑,请告诉我。

【问题讨论】:

  • 你能定义类似的吗?能否也提供一个Minimal, Complete, and Verifiable example
  • 我编辑了原始帖子以包含我目前拥有的代码(当然不是很多)。我还尝试通过一个示例更详细地描述我想要实现的目标。我希望这有助于解决问题!

标签: python-3.x network-programming nodes networkx


【解决方案1】:

从您分享的图表开始:

know_list = ["a", "b", "c", "d"]
G = nx.Graph()
for i in range(1,5):
    G.add_node(i, knowledge = know_list[i-1])

nx.draw(G, with_labels=True, node_size=500, node_color='lightgreen')

您可以反转knowledge 属性的nx.get_node_attributes 返回的映射:

knowledge={j:i for i,j in nx.get_node_attributes(G, 'knowledge').items()}
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}

G.add_node(5, awareness = random.choices(know_list, k=2))
awareness = nx.get_node_attributes(G, 'awareness')
# {5: ['b', 'a']}

然后通过迭代awareness,您可以通过在knowledge 中使用add_edge 查找内部列表中的节点来轻松添加新边:

for k,v in awareness.items():
    for node in v:
        G.add_edge(k,knowledge[node])

nx.draw(G, with_labels=True, node_size=500, node_color='lightgreen')

【讨论】:

    猜你喜欢
    • 2020-02-15
    • 2023-04-02
    • 2021-07-29
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2010-12-16
    相关资源
    最近更新 更多