我有一个包含数字和字符串的单元格数组。有人可以帮助我使用可以计算每行数字平均值的代码吗?
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
答案 0 :(得分:0)
这是一种方式:
Y = mean(str2double(cellfun(@num2str, Mix, 'UniformOutput', false)), 2, 'omitnan');
其工作原理如下:
cellfun(@num2str, Mix, 'UniformOutput', false)
将每个单元格转换为字符串。str2double(...)
将每个单元格转换为数字。这为最初不包含数字的单元格提供了NaN
。结果是一个标准的数字数组。mean(..., 2, 'omitnan')
计算忽略NaN
值的每行的平均值。