zoukankan      html  css  js  c++  java
  • 稀疏矩阵 CSR

    稀疏矩阵 CSR

    CSR

    CSR是稀疏矩阵的一种存储方式,这里举例说明一下CSR的工作原理。
    0 0 0 0
    5 8 0 0
    0 0 3 0
    0 6 0 0

    上述矩阵的CSR存储结果

    row_index = [0 0 2 3 4]
    col_index = [0 1 2 1]
    val       = [5 8 3 6]
    

    row_index用来索引行。如果采用行数的方式来索引,那么在一行具有很多非零元素时,很浪费空间。因此,row_index采用偏移的方式,以0开始,第i+1元素 = 第i元素 +矩阵第i行非零元素数目
    col_index即表示元素所在的列,val是矩阵中该位置存储的真实值。
    下面给出上面row_index的推导过程:
    我们有, i = 0, row_index[0] = 0
    i = 1, row_index[1] = row_index[0] + num[0] =0 (num[i] = 矩阵第i行非零元素数目)
    按同样方式即可完成推导。

    Code

    下面给出用矩阵相乘的代码,矩阵存储结构为CSR

    void mul(csr *m, int *x ,int *y){//y为结果,已初始化为0
        for(int i = 0; i < m->n; i++){
            for(int j = 0; j < (m->row_index[i+1] - m->row_index[i]); j++){
                y[i] = m->val[m->row_index[i] + j] * x[m->col_index[i]] + y[i]; 
            }
        }
    } 
    
  • 相关阅读:
    P1772 [ZJOI2006]物流运输
    P4290 [HAOI2008]玩具取名
    P1859 不听话的机器人
    P1841 [JSOI2007]重要的城市
    P2182 翻硬币
    P1908 逆序对(归并排序)
    P1010 幂次方(分治)
    P3386 【模板】二分图匹配
    P2158 [SDOI2008]仪仗队
    P1582 倒水(贪心 + lowbit)
  • 原文地址:https://www.cnblogs.com/wheszza/p/13227600.html
Copyright © 2011-2022 走看看