从具有混合数字和字符串的单元格数组计算均值

时间:2018-04-30 15:07:49

标签: matlab

我有一个包含数字和字符串的单元格数组。有人可以帮助我使用可以计算每行数字平均值的代码吗?

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'     }

我确实在上一个问题的帮助下解决了这个问题:Find mean of an array with both numbers and strings with Matlab

解决方案:

for k = 1:num
    isNum = cellfun(@isnumeric, Mix(k,:)); % find number in the row
    Y(k,1) = mean(cell2mat(Mix(k,isNum))); % convert to mat for mean
end

1 个答案:

答案 0 :(得分:0)

这是一种方式:

Y = mean(str2double(cellfun(@num2str, Mix, 'UniformOutput', false)), 2, 'omitnan');

其工作原理如下:

  1. cellfun(@num2str, Mix, 'UniformOutput', false)将每个单元格转换为字符串。
  2. str2double(...)将每个单元格转换为数字。这为最初不包含数字的单元格提供了NaN。结果是一个标准的数字数组。
  3. mean(..., 2, 'omitnan')计算忽略NaN值的每行的平均值。