如何在MATLAB中用变量结合load函数批量导入.mat文件?
批量导入.mat文件的解决方案
一、正确的批量导入实现(推荐方式)
你之前的代码问题出在两个地方:一是字符串格式化用了&s(应该是%s),二是load的参数传递方式不对。下面是用for循环批量处理的靠谱方案,建议用结构体或数组存储结果,比单独定义一堆零散变量好管理:
% 定义filterSize的取值范围 filterSizes = 3:2:41; % 初始化结构体来存储导入的数据和提取的accuracy F1_scores = struct(); accuracies = struct(); % 也可以用数组存accuracy,方便后续统计分析 accuracy_array = zeros(1, length(filterSizes)); for i = 1:length(filterSizes) current_size = filterSizes(i); % 生成对应文件名 file_name = sprintf('results_%dx%d.mat', current_size, current_size); % 加载文件数据 loaded_data = load(file_name); % 存入结构体,用尺寸作为字段名 F1_scores.(['size_', num2str(current_size)]) = loaded_data; accuracies.(['size_', num2str(current_size)]) = loaded_data.accuracy; % 存入数组(可选) accuracy_array(i) = loaded_data.accuracy; end
之后你可以通过accuracies.size_3获取3x3的准确率,或者用accuracy_array(1)直接访问,遍历、分析起来都很方便。
二、关于动态生成F1_score_%d这类变量名
虽然能实现,但非常不推荐——动态变量会让代码可读性变差,容易出现命名冲突,调试和维护都很麻烦。如果一定要这么做,可以用eval函数:
filterSizes = 3:2:41; for i = 1:length(filterSizes) current_size = filterSizes(i); file_name = sprintf('results_%dx%d.mat', current_size, current_size); % 动态生成变量并加载数据 eval(sprintf('F1_score_%d = load(''%s'');', current_size, file_name)); eval(sprintf('accuracy_%d = F1_score_%d.accuracy;', current_size, current_size)); end
但还是强烈建议用第一种结构体/数组的方式,代码更规范,后续扩展也更容易。
内容的提问来源于stack exchange,提问作者Yasemin G.
相关产品推荐
相关产品推荐

