1

ワークスペースに、、、、 ...という名前ET1_A_C1_l1のデータがいくつかあります。それ以外に、、、 ...、という名前の別のデータセットもあります。ET1_A_C2_l1ET1_A_C3_l1ET1_A_C63_l1ET1_H_C1_l1ET1_H_C2_l1ET1_A_C63_l1

次に、2つのデータセットを1つの名前の付いたデータに結合する必要があり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]

コードを1つずつ入力するには、かなりの時間がかかる必要があります。これを行うためにを使用するアイデアはあります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 の回答を見て、データを格納するさまざまな方法について考え始める必要があります。cell 配列または構造体は、そのための 1 つの方法です。または、そもそも 1 つの大きなマトリックスから始めます。ただし、次の 2 つの一般的なルールを覚えておいてください。

1) ワークスペースに 20 を超える変数がある場合は、おそらく間違っています。

2) もしあなたが頻繁に悪の機能を使ってevalいることに気づいたら、それは間違いなく間違っています。

于 2012-11-27T06:52:17.890 に答える
1

この種の問題を抱えているということは、セル配列や構造体など、matlab で利用できる他のデータ構造にまだ慣れていないことを示唆しています。データをより少ない配列に格納し、必要に応じて適切にインデックスを作成することで、この問題を簡単に解決できます。

matlab ドキュメントで構造体 (このチュートリアルは優れています)について読んでから、1 つを使用してすべてのデータを保存してみてください。そうすれば、この問題や、あなたが知らなかった他の多くの問題が解決すると思います。

次のようなものを使用する必要があります。

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;

これで、何も入力せずに保存できる 1 つの変数になりました。

于 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 に答える