1

我在 Workspace 中有几个名为ET1_A_C1_l1, ET1_A_C2_l1, ET1_A_C3_l1, ...,的数据。ET1_A_C63_l1除此之外,我还有另一组名为ET1_H_C1_l1, ET1_H_C2_l1, ...,ET1_A_C63_l1

现在我需要将 2 组数据组合成一个名为Total_data.mat; 例如,

Total_data=[ET1_A_C1_l1 ET1_A_C2_l1 ET1_A_C3_l1 ..... ET1_A_63_l1;ET1_H_C1_l1 ET1_H_C2_l1 ....ET1_H_C63_l1]

并且需要花费大量时间来一一键入代码。有什么想法使用loop来做到这一点?

谢谢。

4

3 回答 3

2

我不会立即跳上我的马车,而是从解决方案开始(已通过示例设置):

%# State the size of each matrix
T = 6; N = 2;

%# State the number of matrices in category A and H (63 in your case - but 2 in my example) 
K = 2;

%# Set up some example matrices
ET1_A_C1_l1 = rand(T, N); ET1_A_C2_l1 = 1 + rand(T, N);
ET1_H_C1_l1 = 2 + rand(T, N); ET1_H_C2_l1 = 3 + rand(T, N);

%# Preallocate a matrix to hold the output
M = NaN(2 * T, K * N);

%# Loop over the variables and add them to the matrix using the evil eval
for k = 1:K
    M(1:T, (k*N)-1:k*N) = eval(['ET1_A_C', num2str(k), '_l1']);
    M(T+1:2*T, (k*N)-1:k*N) = eval(['ET1_H_C', num2str(k), '_l1']);
end

%# Save to a mat file
save('Total_Data.mat', 'M');

现在,马车时间:如果你已经以你现在拥有的形式获得了数据,而你对此无能为力,并且你意识到它处于多么可怕的境地,那么你可以停止阅读现在。

但是,如果您首先负责创建所有这些 E_blah 变量,那么您需要查看@jerad 的答案并开始考虑存储数据的不同方式。单元阵列或结构是实现它的一种方法。或者首先从一个大矩阵开始。但请记住以下两条一般规则:

1) 如果您的工作区中有超过 20 个变量,那么您可能做错了。

2)如果你发现自己经常使用 evil 功能eval,那么你几乎肯定做错了。

于 2012-11-27T06:52:17.890 回答
1

遇到此类问题向我表明,您对 matlab 中可用的其他数据结构还不满意……例如元胞数组和结构。您可以通过将数据存储在较少的数组中,然后在需要时正确索引它们来轻松解决此问题。

阅读matlab 文档中的结构(本教程非常好),然后尝试使用一种来存储所有数据。我认为这将解决这个问题以及您不知道的许多其他问题。

你应该使用类似下面的东西。

ET = struct;
ET.A.C(1) = ET1_A_C1;
ET.A.C(2)  = ET1_A_C2;
         ...
ET.A.C(N)  = ET1_A_CN;

ET.H.C(1)  = ET1_H_C1;
ET.H.C(2)  = ET1_H_C2;
          ...
ET.H.C(N)  = ET1_H_CN;

现在每件事都是一个变量,您无需输入任何额外内容即可保存。

于 2012-11-27T04:47:24.487 回答
0

filename=Total_data.mat;

for i=1:63
J(i,1)=ET1_A_C{i};
J(i,2)=ET1_H_C{i};
end

save(filename,'J(1:63,1)','J(1:63,2)');

于 2012-11-27T05:21:28.507 回答