使用标题MATLAB中的数字将for循环中的数据输出到.mat文件

时间:2013-03-26 15:20:40

标签: matlab for-loop save

我需要为以下数据输出.mat文件。我需要一个文件让cell(1,1)为Mean_RPM_list1,cell(2,1)为Mean_RPM_list2等。然后我需要另一个文件让cell(1,1)为Mean_Torque_list1来拥有cell(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

2 个答案:

答案 0 :(得分:0)

首先,创建一组名称与数字不同的变量真是个坏主意。正如您所看到的,处理此类变量非常困难,您始终必须使用eval(或其他相关)语句。

创建单元数组Mean_rpm并将其元素作为Mean_rpm {1}等访问要容易得多。

如果矢量是数字且具有相同的大小,您还可以制作2D / 3D阵列。然后访问Mean_rpm(:,:,1)等。

接下来,要将单元格数组存储到mat文件,您必须在MATLAB中创建此数组。没有选项(至少现在)可以通过循环中的部分来完成。 (但你可以使用matfile对象为数字向量和矩阵做这件事。)那你为什么需要这个中间的Mean_RPM_list变量呢?只需在循环中执行Mean_RPM_list{bin*10} = A

对于您的第一个问题,如果您已经拥有这些变量,则必须在循环中使用eval。像

这样的东西
A = [];
for k=1:K
    eval(sprintf('A{k} = [A, Mean_rpm%d];',k));
end

您还可以获取所有类似变量的名称并将它们组合起来。

varlist = who('Mean_rpm*');
A = cell(1,numel(varlist);
for k = 1:numel(varlist)
    eval('A{k} = varlist{k};');
end

这是一个没有使用CELL2FUN的循环:

A=cellfun(@(x)evalin('base',x),varlist,'UniformOutput',0);

答案 1 :(得分:0)

您应该首先避免使用所有这些个体变量。存在数据类型,如数组,单元数组和结构数组,以帮助您实现此目的。如果希望每个变量与名称关联,则可以使用结构数组。我在下面做了一个例子。不像现在这样将值赋给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