dgl.graph

dgl.graph(data, ntype='_N', etype='_E', card=None, validate=True, restrict_format='any', **kwargs)[source]

Create a graph with one type of nodes and edges.

In the sparse matrix perspective, dgl.graph() creates a graph whose adjacency matrix must be square while dgl.bipartite() creates a graph that does not necessarily have square adjacency matrix.

Parameters:
  • data (graph data) –

    Data to initialize graph structure. Supported data formats are

    1. list of edge pairs (e.g. [(0, 2), (3, 1), …])
    2. pair of vertex IDs representing end nodes (e.g. ([0, 3, …], [2, 1, …]))
    3. scipy sparse matrix
    4. networkx graph
  • ntype (str, optional) – Node type name. (Default: _N)
  • etype (str, optional) – Edge type name. (Default: _E)
  • card (int, optional) – Cardinality (number of nodes in the graph). If None, infer from input data, i.e. the largest node ID plus 1. (Default: None)
  • validate (bool, optional) – If True, check if node ids are within cardinality, the check process may take some time. (Default: True) If False and card is not None, user would receive a warning.
  • restrict_format ('any', 'coo', 'csr', 'csc', optional) – Force the storage format. Default: ‘any’ (i.e. let DGL decide what to use).
  • kwargs (key-word arguments, optional) –

    Other key word arguments. Only comes into effect when we are using a NetworkX graph. It can consist of:

    • edge_id_attr_name
      Str, key name for edge ids in the NetworkX graph. If not found, we will consider the graph not to have pre-specified edge ids.
    • node_attrs
      List of str, names for node features to retrieve from the NetworkX graph
    • edge_attrs
      List of str, names for edge features to retrieve from the NetworkX graph
Returns:

Return type:

DGLHeteroGraph

Examples

Create from pairs of edges with form (src, dst)

>>> g = dgl.graph([(0, 2), (0, 3), (1, 2)])

Create from source and destination vertex ID lists

>>> u = [0, 0, 1]
>>> v = [2, 3, 2]
>>> g = dgl.graph((u, v))

The IDs can also be stored in framework-specific tensors

>>> import torch
>>> u = torch.tensor([0, 0, 1])
>>> v = torch.tensor([2, 3, 2])
>>> g = dgl.graph((u, v))

Create from scipy sparse matrix

>>> from scipy.sparse import coo_matrix
>>> spmat = coo_matrix(([1,1,1], ([0, 0, 1], [2, 3, 2])), shape=(4, 4))
>>> g = dgl.graph(spmat)

Create from networkx graph

>>> import networkx as nx
>>> nxg = nx.path_graph(3)
>>> g = dgl.graph(nxg)

Specify node and edge type names

>>> g = dgl.graph(..., 'user', 'follows')
>>> g.ntypes
['user']
>>> g.etypes
['follows']
>>> g.canonical_etypes
[('user', 'follows', 'user')]

Check if node ids are within cardinality

>>> g = dgl.graph(([0, 1, 2], [1, 2, 0]), card=2, validate=True)
...
dgl._ffi.base.DGLError: Invalid node id 2 (should be less than cardinality 2).
>>> g = dgl.graph(([0, 1, 2], [1, 2, 0]), card=3, validate=True)
Graph(num_nodes=3, num_edges=3,
      ndata_schemes={}
      edata_schemes={})