2017-06-22 517 views
1

所以我想連接一個m x n矩陣來獲得1 x mn矩陣。我想要連接的矩陣是從while循環生成的。儘管列數始終爲3,但我無法知道每次迭代會有多少行。此外,每次迭代的行大小可能並不總是相同的。如何在Matlab中處理「使用vertcat矩陣的維度連接的矩陣不一致」?

的代碼在該行的大小都等於6箱子運行,但在他們是不相等的情況下,我得到一個錯誤:代碼

Error using vertcat Dimensions of matrices being concatenated are not consistent.

部分如下:

A = []; 
B = []; 
searchArea = 2; 

for ii = 1: numel(velocity) 
    Do .... 
    while area(ii,:) < searchArea 
     Do .... 
     % COLLATE vectors for A 
     A = [A; [Ax(ii), Ay(ii), Az(ii)]]; 
     Do ... 
    end 
    %# Copy the A into new variable (B) and Reshape into row vector so as to associate each row to its corresponding velocity 
    B = [B; reshape(A.',1,[])]; 
    A = []; 
end 

有人請告訴我我在做什麼錯在這裏。如果有需要,我會進一步澄清。多謝你們!

+0

通常,我們使用[單元格陣列](https://www.mathworks.com/help/matlab/cell-arrays.html)來存儲不同大小的數組。 –

+0

謝謝@奧尼爾。我最初試圖避免使用單元陣列。在任何情況下,當我嘗試創建一個單元格數組存儲如下:'A = cell(numel(velocity),1);'然後在循環中我有:'B = [B; A];''我遇到兩個問題:1)循環停止(沒有任何錯誤消息),一旦遇到一個數組比以前的迭代更多的行。 2)而不是從索引1開始存儲'B',它從索引101開始(速度從1-100)。任何想法這裏有什麼不對? – User110

+0

哦,我看到我的錯誤:那應該是'B {ii} = A;'。它現在有效!也許我應該堅持單元陣列。謝謝一堆! – User110

回答

0

如果這是你的意圖是B最終成爲一個行向量,那麼您需要更改此:

B = [B; reshape(A.',1,[])]; % Does vertical concatenation 

這樣:

B = [B reshape(A.',1,[])]; % Does horizontal concatenation (note there's no semicolon) 

使每一行向量從重塑A得到獲取added to the end of the row而不是新行(as the semicolon indicates)。