2012-05-05 103 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一個改編。