2016-03-06 650 views
2

我有一個具有+ 16M數據的向量,我必須將它轉換爲每個401x401元素的101個矩陣。我知道如何獨立創建這樣的矩陣(爲它們中的每一個創建一個循環),但我認爲在使用兩個或多個循環時必須有一些方法來創建它們。問題是,我不知道如何做到這一點。 這是我到目前爲止已經試過:Matlab - 通過循環生成多個矩陣

data=load('file.dat');%This file contains 3 columns of data, I only need the first one 
var=data(:,1); 
p=401;%Size of the matrices 
for n=0:400 
    mat1(n+1,:)=var(p*n+1:p*(n+1),:); 
end 

此代碼將創建第一個401x401矩陣。通過改變索引,我可以(單獨)創建其餘的,但我更願意添加另一個循環(或多個循環)來自動創建它們,而不是一次重複這個代碼。

+0

您是否想過使用'reshape'(http://de.mathworks.com/help/matlab/ref/reshape.html)將矢量轉換爲401 x 401 x 101的形式? – fgoettel

+0

這將是一個很好的解決方案,謝謝!但是,我不知道如何繪製這樣一個變量! – Xay

+0

'n = 4; l = 8; vec = 1:n * n * l; mat = reshape(vec,n,n,l); ' 用你的數據替換vec,n用401和l用101,看看會發生什麼;-) – fgoettel

回答

0

函數mat = vec2mat(vec,matcol)將矢量vec轉換爲具有matcol列的矩陣,一次創建一行。如果vec的長度不是matcol的倍數,則在mat的最後一行放置額外的零。矩陣墊有ceil(length(vec)/matcol)行。 另請參閱manual entry

+0

謝謝!這正是我所需要的,這些數據是按行進行的,在創建矩陣時我需要遵守這個順序。有什麼方法可以繪製(3D圖形或其他)結果401x401x101元素變量? – Xay

+0

你有三個參數維度?您只能使用'surf'命令繪製從R^2到R的3D圖。 – peng

+0

您可以瀏覽所有101個樣本,對於每個矩陣'mat',您可以調用'surf(mat)'。 – peng