2012-05-29 24 views
0

我想用一個for循環一個for環(我認爲)內,以產生一個數,我可以分開使用使用polyfit與矢量的。對於內的另一個for循環循環,使新的組矢量

我有一個768x768矩陣,我將它分成768個單獨的單元格向量。不過,我想將每個1x768矩陣分成16個點的部分 - 即48個新的矢量,其長度爲16個值。然後我想用這些信息做一些曲線擬合。

我想給每個48個向量命名不同的東西,但是我想爲每個768列做這個。我可以很容易地做到這一點,但我希望有一種方法來結合他們。我試圖在for語句中將其作爲for語句使用,但它不起作用,我想知道是否有人可以給我一些關於如何生成我想要的東西的提示。我附上了代碼。

Qne是我所有的768 * 768矩陣。

N1=768; 
x=cell(N,1); 

for ii=1:N1; 
    x{ii}=Qnew(1:N1,ii); 
end 

for iii = 1:768; 
    x2{iii}=x{iii}; 
    for iv = 1:39 
    N2=20;   
    x3{iii}=x2{iii}(1,(1+N2*iv:N2+N2*iv)); 
    %Gx{iv}=(x3{iv}); 
    end  
end 
+0

是你的代碼Matlab/Octave代碼?如果是這樣,那麼考慮標記你的問題* matlab。* – thb

+0

非常感謝。它是MATLAB。感謝您的建議。這是我第一次使用這個網站。 :) – user1423578

+0

究竟是什麼問題? btw我注意到一個錯誤 - 在行xr {iii} = ...'你應該檢查索引是否在範圍內(它應該是最大768?) – bdecaf

回答

2

使用正常的2D矩陣進行內部分割。爲什麼?這很容易重塑,你很可能使用的許多擬合操作將會在矩陣的列上進行操作。

for ii=1:N1 
    x{ii} = reshape(Qnew(:, ii), 16, 48); 
end 

現在x{ii}是2D矩陣,尺寸16x48。如果你想分開處理第jj個拆分窗口,你可以說x{ii}(:, jj)。但是,你通常不需要。例如,如果你想要每個窗口的平均值,你可以說mean(x{ii}),它將採用每列的平均值,並返回一個48元素的行向量。

未詢問問題的額外參考:如果您想要重疊窗口而不是鄰接,請參閱信號處理工具箱中的buffer

編輯我的回答:

往前一步,一個三維矩陣可能是同等大小的矢量的最好體現。記住的是reshape()讀出縱列,並填充該新的矩陣縱列,這可以用一個單一的重塑來完成:

x = reshape(Qnew, 16, 48, N1); 

x是現在一個16x48x768 3D陣列,並且ii'th矢量的jj'th窗口現在是x(:, jj, ii)

+0

非常感謝。這很好。然而,我還有一個問題,我可以將這些新載體讀入polyfit曲線嗎?我想曲線擬合矩陣的每個部分 - 每個768行的每個單獨長度爲16個矩陣。感謝:) 對於ii = 1:N1; x {ii} =重塑(Qnew(:,ii),16,48); 對於iii = 1:48; Gx {ii} = x({iii}); Gy = [1:16]; pr {ii} = polyfit(Gx {ii},Gy,2); end end – user1423578

+0

我已經給你提供了從大結構中引用單個窗口的代碼:x {ii}(:,jj)注意我使用jj而不是iii,這太混亂了。你還需要仔細思考和寫作,使用相同的索引,關於你想要放置輸出的位置。 – Peter

+0

好的謝謝。我收到你的更新之前發佈了這個消息。非常感謝您的幫助。 – user1423578