循环中多个不同大小矩阵的高效串联

时间:2014-05-23 12:10:47

标签: arrays matlab optimization cell-array

我想有效地将​​多个矩阵连接成一个向量。但是,这种矩阵的数量和它们的大小各不相同。比如说,我有两个堆栈AB,每个堆栈都包含m个矩阵。

天真的做法如下:

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

具有挑战性的部分是优化上面的代码,以避免在进行每次分配时将旧数组内容复制到新数组。例如,可以计算每个矩阵中的元素数量,然后预分配能够存储所有元素的向量。不过,我并不完全确定如何有效地将矩阵放在矢量中。

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:1)

一种可能的方法:

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

答案 1 :(得分:0)

根据A和B的大小,跟随可能更快

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

(开始显示以上数字(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