我在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
来做这个?
感谢。
答案 0 :(得分: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)如果你发现自己经常使用邪恶的函数eval
那么你几乎肯定做错了。
答案 1 :(得分:1)
有这样的问题告诉我,你还不熟悉matlab中可用的其他数据结构......比如单元阵列和结构。您可以通过将数据存储在较少的数组中,然后在需要时正确索引它们来轻松解决此问题。
在matlab文档中阅读structures (this tutorial is excellent),然后尝试使用一个来存储所有数据。我认为这将解决这个问题以及许多你不了解的问题。
您应该使用以下内容。
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;
现在每件事都是一个变量,你可以保存而无需输入任何额外的东西。
答案 2 :(得分: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)')
;