Matlab timetable写入后读取报错,寻求更优解决方案
解决Matlab Timetable保存与读取的格式问题
问题原因
你的代码出现报错和多余列的核心原因是:writetimetable默认会将timetable的行时间(RowTimes)作为普通数据列写入文本文件,没有标记其为时间索引列。因此:
- 直接调用
readtimetable时,Matlab无法识别哪一列是行时间,触发报错; - 添加
TimeStep参数后,Matlab会自动生成一个从零开始的时间序列作为新的行时间列,原来的RowTimes就保留为普通数据列,导致出现多余列。
最优解决方案
方案1:用Matlab原生二进制格式保存(推荐,仅Matlab内部交互)
如果只是在Matlab脚本之间传递timetable数据,直接使用save和load,完全保留timetable的结构和属性,无需处理格式问题:
% 生成测试timetable RowTimes = seconds(1:5)'; TT = timetable(RowTimes,[98;97.5;97.9;98.1;97.9],[120;111;119;117;116],... 'VariableNames',{'Reading1','Reading2'}) % 保存为.mat文件 save('TT.mat', 'TT') % 在其他脚本中读取 load('TT.mat') % 读取后TT直接是原timetable,可直接使用
方案2:保存为文本格式(需和其他工具交互时用)
如果必须保存为文本文件,读取时通过RowTimesVariable参数指定哪一列是行时间,让Matlab正确识别:
% 保存为文本文件 writetimetable(TT, 'TT.txt') % 读取时指定行时间列 TT2 = readtimetable('TT.txt', 'RowTimesVariable', 'RowTimes')
读取后的TT2结构和原TT完全一致,不会生成多余列。
总结
- 仅Matlab内部使用时,优先选方案1,简单高效且无格式问题;
- 需要跨工具交互时,用方案2指定行时间列,避免多余列和报错。
内容的提问来源于stack exchange,提问作者Jesse Hummel
相关产品推荐
相关产品推荐

