首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算pyTorch/DGL张量

如何计算pyTorch/DGL张量
EN

Stack Overflow用户
提问于 2022-09-26 20:09:27
回答 1查看 41关注 0票数 0

从DGL图中,我想看到邻接矩阵

代码语言:javascript
复制
adjM = g.adjacency_matrix()
adjM

我得到了以下内容,这很好:

代码语言:javascript
复制
tensor(indices=tensor([[0, 0, 0, 1],
                       [1, 2, 3, 3]]),
       values=tensor([1., 1., 1., 1.]),
       size=(4, 4), nnz=4, layout=torch.sparse_coo)

现在,我希望有邻接矩阵和节点值各自独立。我想是这样的:

代码语言:javascript
复制
adjMatrix = adjM.indices   # or
adjMatrix = adjM[0]
nodeValues = adjM.values   # or
nodeValues = adjM[1]

但这种形式不是由pyTorch/DGL估算的。我初学者的问题:

  • 如何正确而成功地完成这一任务?和
  • 有关于nuby的教程吗?(为了这个细节,我搜索了很多.!)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-18 09:05:16

点击这里!您将发现dgl.adj()的用法。正如文档所述,返回是一个邻接矩阵,返回类型是SparseTensor。

我注意到您发布的输出是一个SparseTensor。

您可以按以下方式进行尝试,然后就可以得到整个adj_matrix

我创建一个dgl图g,得到adj的邻接矩阵。

代码语言:javascript
复制
g = dgl.graph(([0, 1, 2], [1, 2, 3]))
adj = g.adj()
adj

产出如下:

代码语言:javascript
复制
tensor(indices=tensor([[0, 1, 2],
                       [1, 2, 3]]),
       values=tensor([1., 1., 1.]),
       size=(4, 4), nnz=3, layout=torch.sparse_coo)

我们可以发现adj是稀疏的,而稀疏类型是coo,我们可以使用下面的代码来验证adj是否是SparseTensor

代码语言:javascript
复制
adj.is_sparse

产出:

代码语言:javascript
复制
True

所以我们可以使用to_dense()得到原始的adj矩阵

代码语言:javascript
复制
adj.to_dense()

结果是:

代码语言:javascript
复制
tensor([[0., 1., 0., 0.],
        [0., 0., 1., 0.],
        [0., 0., 0., 1.],
        [0., 0., 0., 0.]])

当您对DGL有问题时,您可以查看Deep教程和文档。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73859439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档