MCPcopy Create free account
hub / github.com/easy-graph/Easy-Graph / convert_node_labels_to_integers

Function convert_node_labels_to_integers

easygraph/utils/relabel.py:48–106  ·  view source on GitHub ↗

Returns a copy of the graph G with the nodes relabeled using consecutive integers. Parameters ---------- G : graph A easygraph graph first_label : int, optional (default=0) An integer specifying the starting offset in numbering nodes. The new integer labels

(
    G, first_label=0, ordering="default", label_attribute=None
)

Source from the content-addressed store, hash-verified

46
47
48def convert_node_labels_to_integers(
49 G, first_label=0, ordering="default", label_attribute=None
50):
51 """Returns a copy of the graph G with the nodes relabeled using
52 consecutive integers.
53
54 Parameters
55 ----------
56 G : graph
57 A easygraph graph
58
59 first_label : int, optional (default=0)
60 An integer specifying the starting offset in numbering nodes.
61 The new integer labels are numbered first_label, ..., n-1+first_label.
62
63 ordering : string
64 "default" : inherit node ordering from G.nodes
65 "sorted" : inherit node ordering from sorted(G.nodes)
66 "increasing degree" : nodes are sorted by increasing degree
67 "decreasing degree" : nodes are sorted by decreasing degree
68
69 label_attribute : string, optional (default=None)
70 Name of node attribute to store old label. If None no attribute
71 is created.
72
73 Notes
74 -----
75 Node and edge attribute data are copied to the new (relabeled) graph.
76
77 There is no guarantee that the relabeling of nodes to integers will
78 give the same two integers for two (even identical graphs).
79 Use the `ordering` argument to try to preserve the order.
80
81 See Also
82 --------
83 relabel_nodes
84 """
85 N = G.number_of_nodes() + first_label
86 if ordering == "default":
87 mapping = dict(zip(G.nodes, range(first_label, N)))
88 elif ordering == "sorted":
89 nlist = sorted(G.nodes)
90 mapping = dict(zip(nlist, range(first_label, N)))
91 elif ordering == "increasing degree":
92 dv_pairs = [(d, n) for (n, d) in G.degree()]
93 dv_pairs.sort() # in-place sort from lowest to highest degree
94 mapping = dict(zip([n for d, n in dv_pairs], range(first_label, N)))
95 elif ordering == "decreasing degree":
96 dv_pairs = [(d, n) for (n, d) in G.degree()]
97 dv_pairs.sort() # in-place sort from lowest to highest degree
98 dv_pairs.reverse()
99 mapping = dict(zip([n for d, n in dv_pairs], range(first_label, N)))
100 else:
101 raise eg.EasyGraphError(f"Unknown node ordering: {ordering}")
102 H = relabel_nodes(G, mapping)
103 # create node attribute with the old label
104 if label_attribute is not None:
105 eg.set_node_attributes(H, {v: k for k, v in mapping.items()}, label_attribute)

Callers

nothing calls this directly

Calls 4

relabel_nodesFunction · 0.85
reverseMethod · 0.80
number_of_nodesMethod · 0.45
degreeMethod · 0.45

Tested by

no test coverage detected