【问题标题】:Row pointers of Compressed Sparse Row压缩稀疏行的行指针
【发布时间】:2023-01-07 03:40:56
【问题描述】:

我想获得压缩稀疏行存储的行指针。

clear all;
close all;
clc;

A = [55 0 0 49; 0 0 0 0; 0 0 73 0; 0 0 0 0];

n = size(A,1); % no of rows
m = size(A,2); % no of columns

CRS.values = [];
CRS.columns = [];
CRS.rowpointer = [];

counter = 0;
for i=1:n
  for j=1:m
    if (A(i,j) ~= 0)
      CRS.values = [CRS.values A(i,j)];
      CRS.columns = [CRS.columns j];
      CRS.rowpointer = [CRS.rowpointer i,i+1];
    end
  end
end

我试过上面的编码。 CRS.values 是矩阵中非零值的数组。 CRS.columns 是矩阵非零元素的列索引数组。我已经根据需要获得了 CRS.values 和 CRS.columns。但我无法获得 CRS.rowpointer 数组。

CRS.rowpointer 的预期输出:[ 1, 3, 3, 4, 4]

【问题讨论】:

  • 添加语言标签
  • 您之前的问题使用了 python 和 scipy.sparse。但这看起来像 MATLAB 代码,创建了一个 struct。 MATLAB 有稀疏矩阵,但它们使用 csc 格式。
  • 您预期的数组大小为 n+1,每行一个值。您的代码为每个非零元素添加一对值。您仍然不了解 CSR indptr 背后的逻辑。

标签: compression sparse-matrix


【解决方案1】:

此更改可能有效(假设其 MATLAB;但未测试)

counter = 1;
CRS.rowpointer = [counter];
for i=1:n
  for j=1:m
    if (A(i,j) ~= 0)
      CRS.values = [CRS.values A(i,j)];
      CRS.columns = [CRS.columns j];
      counter += 1;
    end
    CRS.rowpointer = [CRS.rowpointer counter];
  end
end

这应该为每个i添加一个数字到CRS.rowpointer;该数字将是非零的累积数量。

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 2023-03-25
    • 1970-01-01
    • 2017-07-07
    • 2015-12-30
    • 2016-10-04
    • 2019-03-12
    • 2020-07-01
    • 2017-12-27
    相关资源
    最近更新 更多