IA阵列的稀疏矩阵CRS逻辑

时间:2017-11-03 16:35:14

标签: algorithm matrix sparse-matrix

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

我需要CRS algoritm。但我无法理解算法到底。我在链接

中有像矩阵一样的矩阵
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 ???

1 个答案:

答案 0 :(得分:0)

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

例如,行i的所有非零元素都将其值存储在A[k]中,并将其关联的j-indices存储在AJ[k]中,其中k

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

掌握的核心理念包含在接下来的两行中:

AI[i]:是row i

开头的跳转偏移量

AI[i+1]-1:是row i+1开头的跳转偏移量,因为我们移除了 1 这就变成了 row i

的最后一个元素

为了说明这一点,我们可以在2种情况下计算矩阵向量乘积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]];
      }  
   }