MATLAB如何移除元胞数组中的测量单位提取温度列纯数值
问题原因
str2double 直接调用返回NaN,是因为temp列的字符串包含空格、华氏度符号°、单位字符F,并非纯数字格式,函数无法识别非数字类字符就会返回空值。
实现方法
给两种可直接运行的方案,按需选择即可:
- 正则提取法(适配格式波动场景)
直接提取字符串里的数字片段,不用关心后缀单位具体是什么,只要数字在前就能抓出来,兼容整数、小数温度值:% 取出temp列的字符串内容 tempCol = cArray.temp; % 正则匹配数字(支持小数的匹配规则:整数部分+可选小数点+可选小数部分) matchedNum = regexp(tempCol, '\d+\.?\d*', 'match', 'once'); % 转成数值后写回原数组 cArray.temp = str2double(matchedNum); - 固定字符替换法(适合单位格式100%固定的场景)
不需要写正则,直接把已知的无关字符全部删掉再转数值,逻辑更直白:% 先转成string类型方便批量替换 tempCol = string(cArray.temp); % 批量删除空格、°、F三类无关字符 tempCol = replace(tempCol, [" ", "°", "F"], ""); % 转成double数值写回原数组 cArray.temp = double(tempCol);
注意事项
- 如果你的温度值存在负数(比如低于0°F的场景),把正则匹配规则改成
-?\d+\.?\d*就能兼容负号识别。 - 转换完成后可以执行
cArray(1:5,:)查看前5行数据,确认temp列已经是纯数值、没有残留单位字符即可。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

