在Matlab中使用spconvert时强制使用特定大小

时间:2012-05-05 18:22:44

标签: matlab sparse-matrix

我正在使用以下命令在MATLAB中加载稀疏矩阵:

A = spconvert(load('mymatrix.txt'));

我知道我的矩阵的维度是1222 x 1222,但是矩阵的加载为1220 x 1221.我知道MATLAB在稀疏保存时不可能推断出矩阵的实际大小。 / p>

使A尺寸合适的可能解决方案是在mymatrix.txt中包含一行,内容为“1222 1222 0”。但我有数百个矩阵,我不想在所有矩阵中都这样做。

如何让MATLAB将矩阵的大小更改为1222 x 1222?

3 个答案:

答案 0 :(得分:2)

我找到了以下问题的解决方案,简单而简短,但不如我希望的那样优雅:

A = spconvert(load('mymatrix.txt'));
if size(A,1) ~= pSize || size(A,2) ~= pSize
    A(pSize,pSize) = 0;
end

其中pSize是矩阵的首选大小。所以我加载矩阵,如果尺寸不是我想要的,我在右下角插入一个0元素。

答案 1 :(得分:1)

对不起,这篇帖子更像是一对澄清问题,而不是答案。

首先,问题是'load'命令还是'spconvert'?如果你这样做,

B = load('mymatrix.txt') 

是你想要的B尺寸?如果没有,那么你可以使用'textread'或'fread'来编写一个函数,在输入'spconvert'之前创建正确大小的矩阵。

其次,你说你正在加载几个矩阵。您正在加载的所有矩阵中的问题是否一致。如同,矩阵总是最终减少两行,比预期的少一列?

答案 2 :(得分:1)

我遇到了同样的问题,这是我遇到的解决方案:

nRows = 1222;
nCols = 1222;
A = spconvert(load('mymatrix.txt'));

[i,j,s] = find(A);
A = sparse(i,j,s,nRows,nCols);

这是对其中一个例子here的改编。