【问题标题】:Sparse matrix CRS logic for IA arrayIA 数组的稀疏矩阵 CRS 逻辑
【发布时间】:2017-11-03 16:35:14
【问题描述】:

我尝试实现Sparse matrix存储格式。维基百科说:this

我需要CRS 算法。但我无法理解算法到底。我在链接中的示例中有矩阵

0 0 0 0
5 8 0 0
0 0 3 0 
0 6 0 0

和 3 个数组

   A  = [ 5 8 3 6 ]
   IA = [ 0 0 2 3 4 ]
   JA = [ 0 1 2 1 ]

好的,我明白了,什么 A - 都不是零元素 JA - 行中第一个非零元素的列索引 但是 IA 的逻辑是什么???

【问题讨论】:

    标签: algorithm matrix sparse-matrix


    【解决方案1】:

    AI[] 向量存储开始一行的位置。

    例如,i 行的所有非零元素的值都存储在 A[k] 中,它们的相关 j 索引存储在 AJ[k] 中,其中 k 是这样的

    AI[i] <= k <= AI[i+1]-1

    要掌握的中心思想包含在接下来的两行中:

    AI[i]: 是在row i开头跳转的偏移量

    AI[i+1]-1: 是在row i+1 开始处跳转的偏移量,但是当我们删除1时,这将成为最后一个元素强>row i


    为了说明这一点,我们可以在以下两种情况下计算矩阵向量积 y=A.x:密集和 CRS 格式(伪代码):

    当 A 稠密时,我们有:

      for (i = 0; i < N; i++)       // row i
      {
          y[i] = 0;
    
          for (j = 0; j < N; j++)   // column j
              y[i] += A[i][j] * x[j];         
      }
    

    与使用 CRS 格式存储 A 的情况进行比较:

       for (i = 0; i < N; i++)   // row i
       {  
          y[i]=0;
    
          for (k = AI[i]; k < AI[i+1]; k++) // nonzero element of row i
          {  
             y[i] += A[k] * x[AJ[k]];
          }  
       }  
    

    【讨论】:

      猜你喜欢
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多