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

如何计算含数字与字符串的cell array中每行数字的均值

搞定Matlab Cell数组每行数字均值计算

我来帮你解决这个问题!针对你提供的混合了字符串和数字的Cell数组Mix,我整理了一套可行的代码方案,不管你的数组是二维每行结构还是一维的,都能轻松处理。

核心逻辑梳理

咱们要做的其实很简单:

  • 挨个处理每一行(如果是二维数组)或者筛选目标数字组(如果是一维)
  • 把每行/每组里的字符串过滤掉,只留下数字元素
  • 对剩下的数字计算均值,把结果妥善存储起来

二维Cell数组的完整代码(对应你说的“每行”需求)

假设你的Mix是按行组织的二维数组(比如每行是一组带字符串标注的数字数据),用这段代码就能直接算出每行的均值:

% 先把你的Cell数组整理成二维结构(如果原始输入是一维,可按实际需求拆分)
Mix = { 
    'U' [4.7506e+05] [5.0141e+05] [5.4067e+05] [542976] [5.7124e+05] [3.9810e+05] [4.4926e+05];
    'U' [531440] [5.3655e+05] 'O' [3.0915e+05] [3.6336e+05] [3.7107e+05] [3.8252e+05];
    [3.3988e+05] [4.3384e+05] 'U' 'U' 'U' 'O' 'U' [3.7107e+05];
    'U' [3.7107e+05] 'U' [3.8252e+05] 'U' 'O'
};

% 初始化存储结果的数组
rowMeans = zeros(size(Mix, 1), 1);

% 遍历每一行计算均值
for i = 1:size(Mix, 1)
    currentRow = Mix(i, :);
    % 筛选出当前行里的所有数字元素
    numericVals = cell2mat(currentRow(cellfun(@isnumeric, currentRow)));
    % 计算均值,如果该行没数字就设为NaN(避免报错)
    if ~isempty(numericVals)
        rowMeans(i) = mean(numericVals);
    else
        rowMeans(i) = NaN;
    end
end

% 打印结果
disp('每行的数字均值:');
disp(rowMeans);

如果你的Mix是一维数组(像你原始输入那样)

如果你的Mix其实是一维的,这里也提供两种常见需求的解决方案:

计算所有数字的整体均值

Mix = { 'U' [4.7506e+05] [5.0141e+05] [5.4067e+05] [542976] [5.7124e+05] [3.9810e+05] [4.4926e+05] 'U' [531440] [5.3655e+05] 'O' [3.0915e+05] [3.6336e+05] [3.7107e+05] [3.8252e+05] [3.3988e+05] [4.3384e+05] 'U' 'U' 'U' 'O' 'U' [3.7107e+05] 'U' [3.7107e+05] 'U' [3.8252e+05] 'U' 'O' };

% 筛选出所有数字元素
allNumbers = cell2mat(Mix(cellfun(@isnumeric, Mix)));
% 计算整体均值
totalMean = mean(allNumbers);
disp('一维数组中所有数字的均值:');
disp(totalMean);

按字符串分隔的组计算均值(可选)

如果你想把一维数组里被U/O分隔开的数字组分别计算均值,可以用这段代码:

Mix = { 'U' [4.7506e+05] [5.0141e+05] [5.4067e+05] [542976] [5.7124e+05] [3.9810e+05] [4.4926e+05] 'U' [531440] [5.3655e+05] 'O' [3.0915e+05] [3.6336e+05] [3.7107e+05] [3.8252e+05] [3.3988e+05] [4.3384e+05] 'U' 'U' 'U' 'O' 'U' [3.7107e+05] 'U' [3.7107e+05] 'U' [3.8252e+05] 'U' 'O' };

groupMeans = [];
currentGroup = [];

for elem = Mix
    if isnumeric(elem{1})
        currentGroup = [currentGroup, elem{1}];
    else
        if ~isempty(currentGroup)
            groupMeans = [groupMeans, mean(currentGroup)];
            currentGroup = [];
        end
    end
end
% 处理最后一组数字
if ~isempty(currentGroup)
    groupMeans = [groupMeans, mean(currentGroup)];
end

disp('每个数字组的均值:');
disp(groupMeans);

关键函数小解释

  • cellfun(@isnumeric, ...):快速判断Cell里的元素是不是数字,返回逻辑数组方便筛选;
  • cell2mat(...):把筛选出来的数字型Cell元素转换成普通数值数组,这样就能用mean()计算均值了;
  • 额外加了空值处理:如果某行/某组没有数字,就返回NaN,避免程序报错崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:52:02