使用标题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文件的主要内容,如果未能解决你的问题,请参考以下文章

将数据变量从 matlab 保存到 csv 或文本文件

将增量为 25 的“for”循环从 C 转换为 MATLAB

Matlab 2008a 中的保持问题

matlab里面的for循环嵌套

matlab如何将一个一维数组从大到小排序

MATLAB for循环