0
我有一个图G,我首先用一组规则构造所有边,然后我想随机删除它们中的一些。 (每个节点都有一个属性“标签”,创建时所有边都具有赋予的权重属性。)如何正确访问Networkx中的边缘属性
我在Python 3.4.2上使用Networkx 1.9.1。
以下代码是我一直试图做到目前为止,我打算从节点删除边缘,如果其度数高于阈值max_degree。
import networkx as nx
import random
G = nx.Graph()
# ...rest of code, adding nodes and edges...
# Remove undesired edges
max_degree = 4
for node in G.nodes():
if nx.degree(G, node) >= max_degree:
node_edges = G.edges([node])
edge_to_remove = random.choice(node_edges)
# Each edge is a tuple (u,v),
# where u and v are nodes in G.
edge_u = G.node[edge_to_remove[0]]
edge_v = G.node[edge_to_remove[1]]
weight_loss = edge_to_remove['weight']
print("Removing edge (weight={2}) from {0} to {1}"
.format(edge_u['label'], edge_v['label'], weight_loss))
G.remove_edges_from([edge_to_remove])
首先,这是行不通的,其次我的胆量告诉我这是麻烦和繁琐。 tutorial建议下面的代码是如何访问边缘属性。该文件指向教程,但我没有这个:
# From tutorial, accessing edge properties:
G.add_edge(1, 2, weight=4.7)
G[1][2]['weight'] = 4.7
G.edge[1][2]['weight'] = 4s
# I'd expect adaption with my code should be
# the following, but alas..
weight_of_edge = G.edge[node_u][node_v]['weight']
请,我会欢迎建议解决方案,我的问题,或更好的方法。
完美,非常感谢。谢谢你的解释。 – 2015-02-24 22:59:57