使用标题MATLAB中的数字将数据从for循环输出到.mat文件
Posted
技术标签:
【中文标题】使用标题MATLAB中的数字将数据从for循环输出到.mat文件【英文标题】:Outputting data from for loop to .mat file using numbers in title MATLAB 【发布时间】:2013-03-26 15:20:39 【问题描述】:我需要为以下数据输出 .mat 文件。我需要一个文件将单元格 (1,1) 设为 Mean_RPM_list1,将单元格 (2,1) 设为 Mean_RPM_list2 等。然后我需要另一个文件将单元格 (1,1) 设为 Mean_Torque_list1 以获取单元格(1, 1).....等等。
有人可以帮我解释一下吗? 另外,如果有人知道如何自动调用矩阵 A 和 B,这样我就可以得到 A = [Mean_rpm1:Mean_rpmMAX],那也会很有帮助。
TIA 寻求帮助。
A = [Mean_rpm1 Mean_rpm2 Mean_rpm3 Mean_rpm4 Mean_rpm5 Mean_rpm6 Mean_rpm7 Mean_rpm8 Mean_rpm9 Mean_rpm10 Mean_rpm11 Mean_rpm12];
B = [Mean_torque1 Mean_torque2 Mean_torque3 Mean_torque4 Mean_torque5 Mean_torque6 Mean_torque7 Mean_torque8 Mean_torque9 Mean_torque10 Mean_torque11 Mean_torque12];
plot(A,B,'*')
for i = 1:num_bins;
bin = first + ((i-1)/10);
eval(sprintf('Mean_RPM_list%0.f = A;',bin*10));
eval(sprintf('Mean_Torque_list%0.f = B;',bin*10));
end
【问题讨论】:
你能把这个问题说得更清楚一点吗? 【参考方案1】:首先,创建一组名称因数字不同而不同的变量确实是个坏主意。如您所见,处理此类变量非常困难,您始终必须使用 eval(或其他相关)语句。
创建元胞数组 Mean_rpm 并以 Mean_rpm1 等形式访问其元素要容易得多。
如果向量是数字且大小相同,您还可以创建一个 2D/3D 数组。然后以 Mean_rpm(:,:,1) 等方式访问。
接下来,要将元胞数组存储到 mat 文件中,您必须在 MATLAB 中创建此数组。没有选项(至少现在)可以通过循环的部分来完成。 (但是您可以使用 matfile 对象对数字向量和矩阵进行此操作。)那么为什么需要这个中间 Mean_RPM_list 变量呢?只需在循环中执行 Mean_RPM_listbin*10 = A
即可。
对于您的第一个问题,如果您已经拥有这些变量,则必须在循环中使用 eval。类似的东西
A = [];
for k=1:K
eval(sprintf('Ak = [A, Mean_rpm%d];',k));
end
您还可以获取所有相似变量的名称并将它们组合起来。
varlist = who('Mean_rpm*');
A = cell(1,numel(varlist);
for k = 1:numel(varlist)
eval('Ak = varlistk;');
end
这是一个使用 CELL2FUN 的无循环:
A=cellfun(@(x)evalin('base',x),varlist,'UniformOutput',0);
【讨论】:
【参考方案2】:您首先应该避免使用所有这些单独的变量。存在数组、元胞数组和结构数组等数据类型来帮助您解决此问题。如果您希望每个变量与一个名称相关联,您可以使用结构体数组。我在下面做了一个例子。不要像现在这样将值分配给Mean_rpm1
,而是将其分配给meanStruct.Mean_rpm1
,然后保存整个结构。
% as you generate values for each variable, assign them to the
% appropriate field.
meanStruct.Mean_rpm1 = [10:10];
meanStruct.Mean_rpm2 = [12:15];
meanStruct.Mean_rpm3 = [13:20];
meanStruct.Mean_rpm4 = [14];
meanStruct.Mean_rpm5 = [15:18];
meanStruct.Mean_rpm6 = [16:20];
meanStruct.Mean_rpm7 = [17:22];
meanStruct.Mean_rpm8 = [18:22];
meanStruct.Mean_rpm9 = [19:22];
meanStruct.Mean_rpm10 = [20:22];
meanStruct.Mean_rpm11 = [21:22];
meanStruct.Mean_rpm12 = [22:23];
% save the structure array
save('meanValues.mat','meanStruct')
% load and access the structure array
clear all
load('meanValues.mat')
temp = meanStruct.Mean_rpm3
【讨论】:
以上是关于使用标题MATLAB中的数字将数据从for循环输出到.mat文件的主要内容,如果未能解决你的问题,请参考以下文章