稀疏矩阵 以及 torch_sparse 整理

1. sparse matrix

Coo 矩阵

  • coo + csr + csc 稀疏矩阵详细分析, 很详细
  • 常用初始化 方式 coo_matrix((data, (i, j)), [shape=(M, N)])):三元组初始化
  • coo_matrix(D):D代表密集矩阵;
  • coo_matrix(S):S代表其他类型稀疏矩阵
  • coo_matrix((M, N), [dtype]):构建一个shape为M*N的空矩阵,默认数据类型是d

Csr 也可以 采用 coo 类似的初始化方式 给出row col,注意 以下两个区别

  • csr_matrix((data, (row_ind, col_ind)), [shape=(M, N)]))
    三者关系:a[row_ind[k], col_ind[k]] = data[k]
  • csr_matrix((data, indices, indptr), [shape=(M, N)])

matrix. todense() 可以转化为dense矩阵

-创建常用 coo比较直观,计算时常转化为 csr 高效

  • 稀疏矩阵GNN实例

2. torch_sparse.scatter

稀疏矩阵 以及 torch_sparse 整理_第1张图片
scatter实例分析

  • 根据index来进行 元素之间的组合。index 参数,它的值 表示 当前 index的元素 最后的 位置。 常用于 message aggregate 中。 考虑我们在进行message passing,之前通常的 做法是采用 X和 A进行矩阵相乘,稀疏矩阵很多元素=0,这样做法低效。
  • 不想通过矩阵相乘,也想得到稀疏矩阵的乘法后的效果,即完成message passing。可以通过 torch_sparse.scatter来实现。邻接矩阵 存储时候 coo 格式 可以提供 edge[0]和 edge[1] 两组表明 出和入的节点值。针对 edge[1]的array,可以根据 其 edge[0] 来判断 和哪个节点相连接,将 edge[0] 作为 scatter中 index 的值,即就将 该矩阵 相应的元素的 message 全都 aggregate到 edge[0]的节点处,实现了消息传递。
  • 1 .理解这个index参数的值的含义— 表明了元素aggregate到哪里去。
  • 2 .point 1中是哪个元素去聚集? index自身的下标(index的index就是元素自身的index)
  • src: 所要操作的对象,gnn中可以传入特征矩阵
  • 参数 dim =0,按照行 看作矩阵(常采用,一行一个node), dim=1,按照列看作节点

你可能感兴趣的:(GNN-scalable,MLP,矩阵,算法,python)