2012-09-20 188 views
2

我正在MATLAB中運行for循環。每次迭代產生一個長度不同於前一次迭代中創建的向量的向量。有沒有什麼原因來恢復每個單獨的載體?最後,我想連接每個這些向量。我的代碼是一樣的東西在MATLAB for循環中恢復矢量

for i=1:n 
    v = zeros(1,i) 
end 

所以i=n後,v將是一個由n個向量,但我也想收回載體對任何i。在我的代碼中,每個向量v不是零行向量,而是大小不等的向量。謝謝。

回答

6

我已經輸入的這個時候羅迪的帖子(+1)來經歷了那麼想我還不如將它張貼了。一種替代的解決方案,這是非常微微效率較低(I做了一些定時運行,差異均邊際)比羅迪的,但避免了複雜的分度是:

A = cell(1, n); 
for i = 1:n 
    A{1, i} = zeros(1, i); 
end 
Soln = cat(2, A{:}); 

我通過變化的長度的行向量存儲在一個單元陣列然後在最後一步中將它們連接起來。

+0

+1確實比我難以閱讀的索引好很多:) –

+0

感謝您的評論,我非常喜歡易於閱讀的索引。 – Edison

3

最簡單的方法是像這樣:

w = []; 
for i=1:n 
    v = zeros(1,i); 

    %# your stuff here  

    w = [w v]; 
end 

其產生矢量w,這是所有產生的向量v的串聯。

但請注意,這是緩慢的,因爲w增長每次迭代。稍微更復雜,但更有效的解決辦法是這樣的:

w = zeros(1, sum(1:n)); 
j = 1; 
for i=1:n 
    v = zeros(1,i); 

    %# your stuff here  

    w(1, j:j+i-1) = v; 
    j = j+i; 
end 
+0

感謝您的評論。 – Edison