我有一个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
并从三元组形式加载它。
还有其他办法吗?
答案 0 :(得分:3)
sparse
可用于从行,列和值的索引创建稀疏矩阵。您需要在索引中添加一个索引以获取基于1
的索引,并使用diff
和repelem
将column_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);