如何将稀疏矩阵转换为密集邻接矩阵?

乔尼

我正在尝试将仅包含非零元素([[行],[列]])的索引的稀疏邻接矩阵/列表转换为在索引处包含1的密集矩阵,否则将包含0。从Pytorch geometric(文档)中找到了使用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)

还是有其他更好的选择?

伊万

您可以先构造一个稀疏矩阵,torch.sparse然后将其转换为密集矩阵,以实现此目的。为此,您将需要提供torch.sparse.FloatTensor索引的二维张量,值的张量以及输出大小:

sparse_adj = torch.tensor([[0, 1, 2, 1, 0], [0, 1, 2, 3, 4]])
torch.sparse.FloatTensor(sparse_adj, torch.ones(5), torch.Size([3,5])).to_dense()

您可以使用以下方法动态获取输出矩阵的大小

sparse_adj.max(axis=1).values + 1

这样就变成了:

torch.sparse.FloatTensor(
    sparse_adj, 
    torch.ones(sparse_adj.shape[1]), 
    (sparse_adj.max(axis=1).values + 1).tolist())

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将“ SciPy稀疏矩阵”转换为“ NumPy矩阵”?

将igraph邻接矩阵转换为numpy数组

将邻接矩阵转换为Cytoscape的Edgelist(csv文件)

使用python将邻接列表转换为稀疏邻接矩阵

熊猫:如何将一个热编码的数据帧转换为邻接矩阵?

将邻接矩阵转换为抽象单纯复形

如何仅通过张量操纵将已知的连接分量转换为邻接矩阵?

如何将块压缩行转换为密集矩阵?

如何将小标题转换为稀疏矩阵

如何将大型边列表csv转换为邻接矩阵

如何将.txt的稀疏表示形式转换为scipy中的密集矩阵?

R:如果值满足特定条件,如何将数据帧转换为邻接矩阵?

将txt文件转换为邻接矩阵

如何将该邻接矩阵转换为图形对象?

将邻接矩阵转换为CSV文件

从最近邻居搜索创建邻接矩阵。(将邻接列表转换为邻接矩阵)-Matlab

如何使用python将邻接矩阵转换为邻接列表?

如何将 Pandas Dataframe 转换为稀疏矩阵?

将邻接矩阵转换为 R 中的两列表

如何将加权边列表转换为 R 中的邻接矩阵

如何将邻接矩阵纳入方程(网络模拟)

如何将加权边列表转换为 r 中的邻接矩阵

在python中将邻接表转换为邻接矩阵

将虚拟编码矩阵转换为邻接矩阵

如何将矩阵转换为邻接矩阵?

将邻接矩阵转换为向量

如何将邻接矩阵保存到文件?

如何将 .txt 文件转换为邻接矩阵?

如何将图形存储在邻接矩阵中