scipy和pytorch的sparse库有啥区别

这个问题具体是针对coo matrix这个存储方式问的

sparse库

首先sparse库是用来存储稀疏矩阵的,pytorch和scipy都有这么个库(好像pytorch比较高的版本才有)。sparse库最主要的就是稀疏矩阵的表示,一般使用三元组的方式存储:(行,列,值),比如scipy的 coo_matrix((data, (i, j)), [shape=(M, N)])

pytorch和scipy的sparse有啥区别

因为看到GNN一些代码里在处理邻接矩阵的时候会把pytorch的sparse转换成scipy的,做个normalization再变回pytorch的sparse,不知道为啥要这么做。

原因:scipy的sparse才能做sum, max这种操作,pytorch的暂时还不支持

总的来说scipy的sparse比pytorch的强大很多,可以理解成pytorch的就只能拿来做矩阵乘法什么的,具体支持内容可以查看官方文档,拉到最底下就是:

scipy: scipy.sparse.coo_matrix
pytorch: pytorch sparse

后来又发现scipy的sparse可以稀疏矩阵乘以稀疏矩阵,pytorch的不行!!

例子

好像字太少链接太多被标记为质量不佳。。。贴一下二者怎么相互转换的吧

def sparse_mx_to_torch_sparse_tensor(sparse_mx):
    """Convert a scipy sparse matrix to a torch sparse tensor."""
    sparse_mx = sparse_mx.tocoo().astype(np.float32)
    indices = torch.from_numpy(
        np.vstack((sparse_mx.row, sparse_mx.col)).astype(np.int64))
    values = torch.from_numpy(sparse_mx.data)
    shape = torch.Size(sparse_mx.shape)
    return torch.sparse.FloatTensor(indices, values, shape)


def torch_sparse_tensor_to_sparse_mx(torch_sparse):
    """Convert a torch sparse tensor to a scipy sparse matrix."""


    m_index = torch_sparse._indices().numpy()
    row = m_index[0]
    col = m_index[1]
    data = torch_sparse._values().numpy()

    sp_matrix = sp.coo_matrix((data, (row, col)), shape=(torch_sparse.size()[0], torch_sparse.size()[1]))

    return sp_matrix
    ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值