我正在编写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
索引的困境。我如何实际计算它们?
答案 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;
}