我想有效地将多个矩阵连接成一个向量。但是,这种矩阵的数量和它们的大小各不相同。比如说,我有两个堆栈A
和B
,每个堆栈都包含m
个矩阵。
天真的做法如下:
merged = [];
for i = 1 : m
merged = [merged ; A{i}(:) ; B{i}(:)];
end
具有挑战性的部分是优化上面的代码,以避免在进行每次分配时将旧数组内容复制到新数组。例如,可以计算每个矩阵中的元素数量,然后预分配能够存储所有元素的向量。不过,我并不完全确定如何有效地将矩阵放在矢量中。
任何建议都将不胜感激。
答案 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