2

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

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

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

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

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

4

3 回答 3

2

我找到了以下问题的解决方案,它简单而简短,但没有我希望的那么优雅:

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

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

于 2012-05-05T19:00:17.273 回答
1

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

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

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

这是对此处示例之一的改编。

于 2013-06-15T16:12:29.473 回答
1

抱歉,这篇文章更像是一个澄清问题,而不是一个答案。

首先,是“load”命令还是“spconvert”的问题?就像,如果你这样做

B = load('mymatrix.txt') 

B是您期望的尺寸吗?如果没有,那么您可以使用“textread”或“fread”编写一个函数,在输入“spconvert”之前创建正确大小的矩阵。

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

于 2012-05-05T18:41:24.120 回答