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]
表示从节点i
到j
的一条边。矩阵必须是方阵,形状为(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 上。
- 返回值:
创建的图。
- 返回值类型:
注意事项
此函数支持各种 SciPy 稀疏矩阵类(例如,
scipy.sparse.csr.csr_matrix
)。它先使用scipy.sparse.spmatrix.tocoo()
将输入矩阵转换为 COOrdinate 格式,然后创建DGLGraph
。因此,从scipy.sparse.coo.coo_matrix
创建是最有效的方式。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')
另请参阅