代码之家  ›  专栏  ›  技术社区  ›  NicolaiF

将scipy-coo_矩阵转换为pytorch稀疏张量

  •  4
  • NicolaiF  · 技术社区  · 6 年前

    我有一个COO矩阵:

    from scipy.sparse import coo_matrix
    coo = coo_matrix((3, 4), dtype = "int8")
    

    我想转换成pytorch稀疏张量。根据文件 https://pytorch.org/docs/master/sparse.html 它应该遵循coo格式,但我找不到简单的转换方法。任何帮助都将不胜感激!

    1 回复  |  直到 6 年前
        1
  •  7
  •   twolffpiggott    6 年前

    使用数据,如 Pytorch docs ,可以简单地使用numpy的属性 coo_matrix :

    import torch
    import numpy as np
    from scipy.sparse import coo_matrix
    
    coo = coo_matrix(([3,4,5], ([0,1,1], [2,0,2])), shape=(2,3))
    
    values = coo.data
    indices = np.vstack((coo.row, coo.col))
    
    i = torch.LongTensor(indices)
    v = torch.FloatTensor(values)
    shape = coo.shape
    
    torch.sparse.FloatTensor(i, v, torch.Size(shape)).to_dense()
    

    产量

    0 0 3
    4 0 5
    [torch.FloatTensor of size 2x3]