0

我需要为以下数据输出 .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
4

2 回答 2

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
于 2013-03-26T16:44:02.377 回答
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);
于 2013-03-26T16:36:07.197 回答