2014-05-23 59 views
2

我想將多個矩陣高效地連接成一個向量。但是,這種矩陣的數量及其大小各不相同。說,我有兩個堆棧AB,每個包含m矩陣。循環中多個大小矩陣的有效連接

樸素方法將是以下:

merged = []; 
for i = 1 : m 
    merged = [merged ; A{i}(:) ; B{i}(:)]; 
end 

具有挑戰性的部分是優化上面的代碼,以避免複製的年齡較大的數組的內容爲新的數組,因爲它使每個任務。例如,可以計算每個矩陣中元素的數量,然後預先分配一個能夠存儲所有元素的向量。不過,我不完全確定如何有效地將矩陣放置在矢量中。

任何建議,將不勝感激。

回答

1

一個可行的方法:

merged = cellfun(@(x) x(:), [A(:) B(:)].', 'uni', false); 
merged = vertcat(merged{:}); 
+0

請回答我的文章,因爲我認爲它與U相關,http://stackoverflow.com/questions/23826559 /輸出類功能在matlab#23828623 –

+0

完美的作品,謝謝。 – voo

0

根據A和B的大小後續可能會更快

C = {A{:} ; B{:}}; 
merged = vertcat(C{:}); 

(開始顯示上述numel(A)> 500)

我用下面的作爲測試數據

m = 1000; 
A = cell(m,1); 
B = cell(m,1); 
for i=1:m 
    A{i} = round(10*rand(max(round(11*rand),1),1)); 
    B{i} = round(10*rand(max(round(5*rand),1),1)); 
end 
+0

你不能使用'vertcat',如果像OP所說的那樣,矩陣的大小通常是不同的 –