我尝试了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 ???
答案 0 :(得分:0)
AI[]
向量存储开始行的位置。
例如,行i
的所有非零元素都将其值存储在A[k]
中,并将其关联的j-indices存储在AJ[k]
中,其中k
为1}} p>
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]];
}
}