Matlab如何访问cell数组中存储的timeseries数据并导出CSV
报错核心原因
MATLAB中cell数组属于容器类型,不支持直接用点索引访问内部元素的属性,你之前调用cell.Data的写法,本质是试图对整个cell数组做属性索引,必然触发"Dot indexing is not supported for variables of this type."报错。直接在命令行打印cell元素时只显示{1x1 timeseries},是cell数组的默认显示规则:仅输出元胞内元素的类型概要,不会自动展开对象内容。
正确访问规则
访问cell内部存储的实际对象,必须使用花括号{}做索引:
- 用圆括号
()对cell做索引,返回结果仍然是cell类型的切片,无法直接访问内部对象属性 - 用花括号
{}对cell做索引,才能直接拿到元胞内存储的原生对象,之后就可以正常用点索引访问timeseries的属性
比如对n*1维度的cell数组ts_cell,要取第i个元胞内timeseries的数值数据,正确写法是ts_cell{i}.Data,取对应时间戳的写法是ts_cell{i}.Time。
批量提取合并导出CSV的参考实现
% 配置路径 mat_folder = "替换为你的mat文件所在文件夹路径"; mat_files = dir(fullfile(mat_folder, "*.mat")); merged_data = []; % 遍历所有mat文件 for file_idx = 1:length(mat_files) % 加载当前mat文件,load返回结构体存储文件内所有变量 current_file = load(fullfile(mat_files(file_idx).folder, mat_files(file_idx).name)); % 替换为你mat文件中实际存储的cell数组变量名 ts_cell = current_file.ts_cell; % 遍历当前cell数组的所有元胞 for cell_idx = 1:length(ts_cell) % 取出timeseries对象,提取6*n维度的数据,转置为n*6(每行对应一个采样点) ts_values = ts_cell{cell_idx}.Data'; % 可选:增加列标记数据来源(文件序号、元胞序号) ts_values = [repmat([file_idx, cell_idx], size(ts_values,1), 1), ts_values]; % 拼接到总数据集 merged_data = [merged_data; ts_values]; end end % 导出为CSV文件 writematrix(merged_data, "merged_output.csv");
提示:如果需要给CSV加表头,可以先定义表头元胞数组,和数据拼接后用
writecell导出即可;如果需要保留时间维度,额外提取ts_cell{cell_idx}.Time拼接到数据列前即可。
内容的提问来源于stack exchange,提问作者Ketchup
相关产品推荐
相关产品推荐

