MATLAB:从压缩列存储创建稀疏矩阵

时间:2018-03-28 03:31:36

标签: matlab

我有一个C ++程序,用于表示用于表示压缩列存储格式矩阵的各种数组。

例如,我有以下数据:

column_pointer = [ 0,3,6,8, 10]
row_index = [0,1,3,1,2,3,0,2,1,3]
values = [4.0, 3.0, 3.0, 2.7, 1.8, 0.3, 3.2, 3.0, 0.1, 1.0]

我想在MATLAB中根据这些值创建一个稀疏矩阵。但我找到的唯一方法是使用spconvert并从三元组形式加载它。

还有其他办法吗?

2 个答案:

答案 0 :(得分:3)

sparse可用于从行,列和值的索引创建稀疏矩阵。您需要在索引中添加一个索引以获取基于1的索引,并使用diffrepelemcolumn_pointer转换为col_index

row_index = row_index + 1;
col_index = repelem(1:numel(column_pointer)-1,diff(column_pointer));
result = sparse(row_index, col_index, values);

答案 1 :(得分:0)

我从@ rahnema1中获取灵感,并且能够对其进行编码。

        a = column_pointer+1;
        a = diff(a);
        Ci =row_index+1;
        Cx = values

        count = 1;
        Cp = [];
        for i = 1:length(a)
           Cp = [Cp count * ones(1,a(i))];
           count = count+1;
        end

        M = sparse(Ci, Cp, Cx);