Is it possible to create a property graph in NetworKit?

1.1k Views Asked by At

For example, I would like to add some attributes to nodes and edges (say, some labels or any other additional info).

Is it possible to do that in NetworKit?

Thank you in advance!

2

There are 2 best solutions below

0
angriman On BEST ANSWER

NetworKit does not store internally additional node/edge attributes. However, assuming that you have a graph G, you can store properties externally (e.g., in a list or in a map), and use node/edge ids to access them. In NetworKit, node ids are always indexed from 0 to G.upperNodeIdBound() - 1, while edge ids are always indexed from 0 to G.upperEdgeIdBound() - 1.

To use edge ids, you first need to call G.indexEdges(), as edge ids are not generated by default. Then, G.edgeId(u, v) returns the id of the edge from node u to node v.

You can find more about this in the documentation of the NetworKit Graph class.

1
Alex On

Now, the latest version provide an API called "attachNodeAttribute" to create attribute for each node in a graph. You can attaches a node attribute to the graph G, then get and set attributes for each node.

For example:

A = G.attachNodeAttribute("attributeIdentifier", ofType) # attach a node attribute to Graph G

A[node] = value # set

value = A[node] # get

Check the following link to get more information in the documentation: https://networkit.github.io/dev-docs/python_api/networkit.html?highlight=attachnodeattribute#networkit.Graph.attachNodeAttribute