MATLAB:从压缩列存储创建稀疏矩阵 我有一个C++程序,它可以用各种列来表示压缩列存储格式中的矩阵。
例如,我有以下数据:MATLAB:从压缩列存储创建稀疏矩阵 我有一个C++程序,它可以用各种列来表示压缩列存储格式中的矩阵。,matlab,Matlab,例如,我有以下数据: 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并从三元组形式加载它 还有其他方法吗?可以用来从行、列和值的索引创建稀疏矩阵。您需要向索引中添加一个,以获取基于1的索引,并使用diff
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
并从三元组形式加载它
还有其他方法吗?可以用来从行、列和值的索引创建稀疏矩阵。您需要向索引中添加一个,以获取基于1
的索引,并使用diff
和repelem
将列指针
转换为列索引
row_index = row_index + 1;
col_index = repelem(1:numel(column_pointer)-1,diff(column_pointer));
result = sparse(row_index, col_index, values);
我从@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);
当
column\u pointer=[0,1,4,8]row\u index=[2 0 1 3 0 1 2 3]values=[2 1 3 2 4 1 1 2]
@rahnema1我更改了它,并且在查看了代码后给出了我的答案。总是预先分配,而不是不断更改数组的大小。使用i
作为变量名也不是一个好主意