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]; 
            }
        }
    } 
    
  • 相关阅读:
    CCF——分蛋糕(2017-3)
    CCF——公共钥匙盒(2017-9)
    CCF——打酱油(2017-9)
    CCF——游戏(2017-12)
    SDS-简单动态字符串
    Redis主从复制
    MySQL 知识点
    MySQL 死锁
    Java 类加载机制
    Java IO
  • 原文地址:https://www.cnblogs.com/wheszza/p/13227600.html
Copyright © 2011-2022 走看看