You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab中高效对嵌套Cell数组进行垂直求和

嵌套Cell数组列垂直求和的MATLAB优化方案

问题背景

给定嵌套Cell数组DB,需要对每一列的元素执行垂直求和操作。当前采用嵌套for循环实现,运行效率偏低,需优化以减少或消除循环。

原始数据

DB={ {[11 12]}  {[13 14]} {[15 16]} {[17 18]} {[19 20]};
    {[21 22]} {[23 24]} {[25 26]} {[27 28]} {[29 30]};
    {[31 32]} {[33 34]} {[35 36]} {[37 38]} {[39 40]}}

期望结果

[33 36]  [69 72] [75 78] [81 96] [87 90]

注:原期望结果中[81 44]为笔误,按数据计算应为17+27+37=81,18+28+38=96

现有循环实现

sum = [];
for j=1:5
    sumi = 0;
    for i=1:3
        sumi = sumi + DB{i,j}{1}; % 原代码中c2应为DB,修正笔误
    end
    sum = [sum sumi];
end

注意:sum是MATLAB关键字,建议改用result等变量名避免冲突


优化方案

方案1:完全无循环的向量化解法

利用cellfun展开嵌套结构,结合数组维度求和实现:

% 提取嵌套Cell中的向量,生成3×5的Cell矩阵
cell_mat = cellfun(@(x) x{1}, DB, 'UniformOutput', false);
% 将Cell矩阵拼接为3×2×5的数值数组,沿第一维度求和后压缩维度
sum_values = squeeze(sum(cat(3, cell_mat{:}), 1));
% 转换为期望的Cell格式
result = num2cell(sum_values, 2);

此方案完全消除循环,借助MATLAB的向量化特性,处理大规模数据时效率提升显著。

方案2:单循环+矩阵操作优化

保留外层循环,用矩阵操作替代内层循环,代码更直观:

result = cell(1, size(DB,2));
for j=1:size(DB,2)
    % 将当前列的嵌套Cell转为矩阵,按行求和
    col_matrix = cell2mat(DB(:,j));
    result{j} = sum(col_matrix, 1);
end

该方案仅保留一层循环,内层循环由高效的矩阵求和操作替代,性能优于嵌套循环。


内容的提问来源于stack exchange,提问作者jeanjacquesvivde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 19:54:55