2012-05-05 122 views
2

我使用的命令加载一个稀疏矩阵在MATLAB使用spconvert时:强制特定尺寸在Matlab

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

我知道,我的矩阵的尺寸为1222 X 1222,但矩阵加载1220 x 1221.我知道,当保存稀疏时,MATLAB不可能推断出矩阵的实际大小。

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

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

回答

2

我发现了以下问题的解决方案,因为我希望这是简单且短,但不作为优雅:

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

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

1

对不起,这篇文章是一对澄清的问题比它是一个答案。

首先,'load'命令或'spconvert'是问题吗?如在你做的

B = load('mymatrix.txt') 

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

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

+0

这个问题既没有加载,也没有spconvert。在我保存之前,我的原始矩阵是1222 x 1222,但是当保存为稀疏矩阵时,其中一些元素当然被省略了。因此,当我再次加载时,尺寸已经改变。 矩阵有相同的问题,但不是所有相同的大小。 – utdiscant

+0

@utdiscant:请包括我们的保存代码。 – PearsonArtPhoto

+0

矩阵由MATLAB和C++程序以ASCII格式保存。它们以3列的格式保存,其中第一列是行号,第二列是列号,最后一列是元素的值。 – utdiscant

1

我有同样的问题,这是我碰到的解决方案:

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

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

它的例子here一个改编。