dgl.from_scipy

dgl.from_scipy(sp_mat, eweight_name=None, idtype=None, device=None)[source]

从 SciPy 稀疏矩阵创建图并返回。

参数:
  • sp_mat (scipy.sparse.spmatrix) – 图的邻接矩阵。每个非零条目 sp_mat[i, j] 表示从节点 ij 的一条边。矩阵必须是方阵,形状为 (N, N),其中 N 是图中的节点数。

  • eweight_name (str, optional) – 用于存储 sp_mat 的非零值的边数据(edata)名称。如果提供,DGL 将把 sp_mat 的非零值存储在返回图的 edata[eweight_name] 中。

  • idtype (int32 or int64, optional) – 用于存储与结构相关的图信息(如节点和边 ID)的数据类型。它应该是一个特定于框架的数据类型对象(例如,torch.int32)。默认情况下,DGL 使用 int64。

  • device (device context, optional) – 结果图所在的设备。它应该是一个特定于框架的设备对象(例如,torch.device)。默认情况下,DGL 将图存储在 CPU 上。

返回值:

创建的图。

返回值类型:

DGLGraph

注意事项

  1. 此函数支持各种 SciPy 稀疏矩阵类(例如,scipy.sparse.csr.csr_matrix)。它先使用 scipy.sparse.spmatrix.tocoo() 将输入矩阵转换为 COOrdinate 格式,然后创建 DGLGraph。因此,从 scipy.sparse.coo.coo_matrix 创建是最有效的方式。

  2. DGL 内部以不同的稀疏格式维护图结构的多个副本,并根据调用的计算选择最有效的格式。对于大型图,如果内存使用成为问题,请使用 dgl.DGLGraph.formats() 限制允许的格式。

示例

以下示例使用 PyTorch 后端。

>>> import dgl
>>> import numpy as np
>>> import torch
>>> from scipy.sparse import coo_matrix

创建一个包含三条边的小图。

>>> # Source nodes for edges (2, 1), (3, 2), (4, 3)
>>> src_ids = np.array([2, 3, 4])
>>> # Destination nodes for edges (2, 1), (3, 2), (4, 3)
>>> dst_ids = np.array([1, 2, 3])
>>> # Weight for edges (2, 1), (3, 2), (4, 3)
>>> eweight = np.array([0.2, 0.3, 0.5])
>>> sp_mat = coo_matrix((eweight, (src_ids, dst_ids)), shape=(5, 5))
>>> g = dgl.from_scipy(sp_mat)

获取边权重。

>>> g = dgl.from_scipy(sp_mat, eweight_name='w')
>>> g.edata['w']
tensor([0.2000, 0.3000, 0.5000], dtype=torch.float64)

在第一个 GPU 上创建一个数据类型为 int32 的图。

>>> g = dgl.from_scipy(sp_mat, idtype=torch.int32, device='cuda:0')

另请参阅

graph, from_networkx