MATLAB元胞数组转数值数组触发cat维度不一致报错排查
MATLAB 元胞数组转数值向量报错解决方案
报错根因
- 调用
cell2mat时触发的cat维度不匹配错误,来自cell2mat函数的内部逻辑:该函数的作用是将元胞中存储的同维度同类型数据直接拼接为普通矩阵,不需要用户手动调用cat。 - 你当前
split得到的元胞中,每个元素是长度不一致的char字符数组:比如'11'长度为2,'106'长度为3,纵向拼接时维度不匹配自然报错。 - MATLAB中单引号定义的char类型本质是ASCII字符数组,
cell2mat不具备自动将字符串解析为数值的能力,哪怕所有字符串长度一致,cell2mat也只会把内容拼接为长字符数组,不会输出数值结果,这个场景下本身就不适合用cell2mat做转换。
可行解决方法
方法1:一步转换原始字符串(推荐,代码最简洁)
你从文件中读入的line_ex本身就是逗号分隔的数值格式字符串,不需要先做split,直接用str2num即可直接得到目标数值向量:
fid = fopen('dump.dat'); line_ex = fgetl(fid); num_vec = str2num(line_ex)
运行输出结果为:
num_vec = 106 94 241 11 190 237 209 224
方法2:转换split后的字符串元胞
如果你已经完成了split操作拿到了newStr元胞数组,用str2double批量遍历转换元胞内的每个字符串即可:
newStr = split(line_ex,','); num_vec = str2double(newStr);
注意:不要对char类型数组直接批量用str2num,否则会将字符按ASCII码值转换,得到完全不符合预期的结果。
内容的提问来源于stack exchange,提问作者gyuunyuu
相关产品推荐
相关产品推荐

