我正在尝试将仅包含非零元素([[rows],[columns]])的索引的稀疏邻接矩阵/列表转换为在索引处包含 1 的密集矩阵,否则为 0。我找到了使用来自Pytorch几何(文档)的 to_dense_adj 的解决方案。但这并不完全符合我的要求,因为密集矩阵的形状并不像预期的那样。这是一个例子:
sparse_adj = torch.tensor([[0, 1, 2, 1, 0], [0, 1, 2, 3, 4]])
因此密集矩阵的大小应为 5x3(第二个数组“存储”列;在 (0,0)、(1,1)、(2,2)、(1,3) 和 ( 0,4)) 因为第一个数组中的元素小于或等于 2。
然而,
dense_adj = to_dense(sparse_adj)[0]
输出一个密集矩阵,但形状为 (5,5)。是否可以定义输出形状或者是否有不同的解决方案来获得我想要的?
编辑:我有一个解决方案现在可以将其转换回稀疏表示
dense_adj = torch.sparse.FloatTensor(sparse_adj, torch.ones(5), torch.Size([3,5])).to_dense()
ind = dense_adj.nonzero(as_tuple=False).t().contiguous()
sparse_adj = torch.stack((ind[1], ind[0]), dim=0)
或者有没有更好的替代方法?