如何计算稀疏矩阵表示中的行偏移?

时间:2014-07-25 20:34:13

标签: c storage sparse-matrix

我正在编写SpMxV(稀疏矩阵向量乘法)程序,其中我以CRS格式存储稀疏矩阵,然后执行操作。 Here's a short introduction格式。

我知道如何获取val和col_index_array数组:

for (row_idx = 0; row_idx < row_count; row_idx++) {
        for (col_idx = 0; col_idx < column_count; col_idx++) {
            if (sparse_matrix[row_idx][col_idx] != 0) {
                val[i] = sparse_matrix[row_idx][col_idx];
                col_idx_array[i] = col_idx;
                i++;
            }
        }
    }

但我陷入了获取row_ptr索引的困境。我如何实际计算它们?

2 个答案:

答案 0 :(得分:1)

我们有

row_ptr[i + 1] - row_ptr[i] = number of values in row i

因此,当我们查看下一行时,我们只需在i中存储当前条目数row_ptr

for (row_idx = 0; row_idx < row_count; row_idx++) {
    row_ptr[row_idx] = i;
    /* other code ommited */
}
row_ptr[row_idx] = i; /* equivalent to row_ptr[row_count] = i;
                       * total number of entries
                       */

请注意,这假设您的数组是0索引的,而您发布的介绍假定为1索引数组。

答案 1 :(得分:1)

使用您的代码看起来像这样:

for (row_idx = 0; row_idx&lt; row_count; row_idx ++){
for (col_idx = 0; col_idx&lt; column_count; col_idx ++){
if (sparse_matrix [row_idx] [col_idx]!= 0){
val [i] = sparse_matrix [row_idx] [col_idx];
col_idx_array [i] = col_idx;
我++;
}
}
row_ptr [row_idx + 1] = I;
}