Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB:从压缩列存储创建稀疏矩阵 我有一个C++程序,它可以用各种列来表示压缩列存储格式中的矩阵。_Matlab - Fatal编程技术网

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
作为变量名也不是一个好主意