pymnet.MultilayerNetwork

class pymnet.MultilayerNetwork(aspects=0, noEdge=0, directed=False, fullyInterconnected=True)

General multilayer network with a tensor-like interface.

See Reference [1] for background on the definition of this class.

There are several ways of accessing the edges and nodes of the network. If there is a single aspect, then the following notation can be used:

>>> net[i,s]                   #node i at layer s
>>> net[i,j,s,r]               #edge between nodes i and j and layers s and r
>>> net[i,j,s] == net[i,j,s,s] #edge between nodes i and j at layer s

Following slicing notation can also be used:

>>> net[i,:,s,:] == net[i,s]   #node i at layer s
>>> net[i,j,s,:]               #node i at layer s, but only links to j are visible
>>> net[i,:,s,r]               #node i at layer s, but only links to layer r are visible
>>> net[i,:,s] == net[i,:,s,s] 

Similar notation holds for two (or more) aspects:

>>> net[i,s,x]                 #node i at layer s in aspect 1 and at layer x in aspect 2
>>> net[i,j,s,x]               #link i,j at layer s in aspect 1 and layer x in aspect 2 = i,j,s,s,x,x
>>> net[i,j,s,r,x,y]           #link i,j between layers s and r in aspect 1 and between layers x and y in aspect 2
>>> net[i,:,s,:,x,:] == net[i,s,x]
>>> net[i,j,s,:,x,y]           #node i at layer s and y, but only links to j and y are visible
>>> net[i,:,s,x] == net[i,:,s,s,x,x]
Parameters
aspectsint

Number of aspects

noEdgeobject

Any object signifying that there is no edge.

directedbool

True if the network is directed, otherwise it’s undirected.

fullyInterconnectedbool

Determines if the network is fully interconnected, i.e. all nodes are shared between all layers. Ignored if aspects==0.

See also

MultiplexNetwork

A class for multiplex networks

Notes

The default data structure behind this class is a graph similar to the one described in Reference [1] implemented with nested dictionaries. The downside to this implementation is that, for example, iterating through all the inter-layer links is not possible without inspecting also the inter-layer links.

References

[1] Multilayer Networks. Mikko Kivela, Alexandre Arenas, Marc Barthelemy, James P. Gleeson, Yamir Moreno, Mason A. Porter, arXiv:1309.7233 [physics.soc-ph]

Attributes
edges

Methods

add_layer(layer[, aspect])

Adds an empty layer to the network.

add_node(node[, layer])

Adds an empty node to the network.

get_layers([aspect])

Returns the set of (elementary) layers (in a given aspect).

get_supra_adjacency_matrix([includeCouplings])

Returns the supra-adjacency matrix and a list of node-layer pairs.

iter_layers([aspect])

Iterate over all layers.

iter_node_layers()

Iterate over all node-layer pairs.

iter_nodes([layer])

Iterate over nodes in the network.

__init__(aspects=0, noEdge=0, directed=False, fullyInterconnected=True)

Initialize self. See help(type(self)) for accurate signature.

Methods

__init__([aspects, noEdge, directed, …])

Initialize self.

add_layer(layer[, aspect])

Adds an empty layer to the network.

add_node(node[, layer])

Adds an empty node to the network.

get_layers([aspect])

Returns the set of (elementary) layers (in a given aspect).

get_supra_adjacency_matrix([includeCouplings])

Returns the supra-adjacency matrix and a list of node-layer pairs.

iter_layers([aspect])

Iterate over all layers.

iter_node_layers()

Iterate over all node-layer pairs.

iter_nodes([layer])

Iterate over nodes in the network.

Attributes

edges