gpt4 book ai didi

performance - 更快地连接不同大小的元胞数组

转载 作者:太空宇宙 更新时间:2023-11-03 20:29:05 25 4
gpt4 key购买 nike

我有一个大小为 m x 1 的元胞数组,每个元胞也是 s x t 元胞数组(大小各不相同)。我想垂直连接。代码如下:

function(cell_out) = vert_cat(cell_in)
[row,col] = cellfun(@size,cell_in,'Uni',0);
fcn_vert = @(x)([x,repmat({''},size(x,1),max(cell2mat(col))-size(x,2))]);
cell_out = cellfun(fcn_vert,cell_in,'Uni',0); % Taking up lot of time
cell_out = vertcat(cell_out{:});
end

第 3 步需要很长时间。这是正确的做法还是有其他更快的方法来实现这一目标?

最佳答案

cellfun 被发现是slower than loops (有点旧,但同意我所看到的)。此外,repmat 过去也曾影响性能(尽管现在可能有所不同)。试试这个旨在完成您的任务的双循环代码:

function cellOut = vert_cat(c)

nElem = length(c);
colPad = zeros(nElem,1);
nRow = zeros(nElem,1);
for k = 1:nElem
[nRow(k),colPad(k)] = size(c{k});
end
colMax = max(colPad);
colPad = colMax - colPad;

cellOut = cell(sum(nRow),colMax);
bottom = cumsum(nRow) - nRow + 1;
top = bottom + nRow - 1;
for k = 1:nElem
cellOut(bottom(k):top(k),:) = [c{k},cell(nRow(k),colPad(k))];
end

end

我对这段代码的测试是

A = rand(20,20);
A = mat2cell(A,ones(20,1),ones(20,1));
C = arrayfun(@(c) A(1:c,1:c),randi([1,15],1,5),'UniformOutput',false);
ccat = vert_cat(c);

关于performance - 更快地连接不同大小的元胞数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28284901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com