2016-08-11 12 views
1

次のコードを使用して3つの異なる行列をファイルに書きたいとします。複数の行列を書き込むことなくMatlabのファイルに書き込む方法

REF=[0 6; 
    1 6; 
    2 6; 
    5 6; 
    10 6; 
    50 6; 
    100 6; 
    1000 6]; 
dlmwrite('exp.txt',REF,'delimiter','\t','precision',4) 

A1=[0 6; 
    1 3; 
    2 4; 
    5 4; 
    10 4; 
    50 4; 
    100 4; 
    1000 4]; 
dlmwrite('exp.txt',A1,'delimiter','\t','precision',4) 

A2=[0 8; 
    1 8; 
    2 8; 
    5 8; 
    10 8; 
    50 8; 
    100 8; 
    1000 8]; 
dlmwrite('exp.txt',A2,'delimiter','\t','precision',4) 


fclose(fileID); 

私のプログラムを実行すると、最後の行列のみがファイルに存在し、以前のすべてのデータは上書きされています。上書きされないで複数の行列を1つのファイルに書き込むにはどうすればよいですか?

+1

[documentation](http://www.mathworks.com/help/matlab/ref/dlmwrite.html)から、ファイルの末尾にデータを追加するために ''-append''を使います。 – excaza

+0

'dlmwrite'で' fopen'を使うのも無意味です。 'dlmwrite'はファイルを内部的に開きます。 – excaza

+0

"append"は、単一行列の最後にデータを追加します。しかし、私は、3つの行列すべてを別々の実体としてファイル内で利用できるようにしたい。だから私は別のプログラムにファイルを読み込むとき、私は3つの行列を取得する必要があります。 –

答えて

4

使用-append

REF=[0 6; 
    1 6; 
    2 6; 
    5 6; 
    10 6; 
    50 6; 
    100 6; 
    1000 6]; 
dlmwrite('exp.txt',REF,'delimiter','\t','precision',4) 

A1=[0 6; 
    1 3; 
    2 4; 
    5 4; 
    10 4; 
    50 4; 
    100 4; 
    1000 4]; 
dlmwrite('exp.txt',A1,'delimiter','\t','precision',4, '-append','roffset',1) 

A2=[0 8; 
    1 8; 
    2 8; 
    5 8; 
    10 8; 
    50 8; 
    100 8; 
    1000 8]; 
dlmwrite('exp.txt',A2,'delimiter','\t','precision',4, '-append','roffset',1) 

結果:

0 6 
1 6 
2 6 
5 6 
10 6 
50 6 
100 6 
1000 6 

0 6 
1 3 
2 4 
5 4 
10 4 
50 4 
100 4 
1000 4 

0 8 
1 8 
2 8 
5 8 
10 8 
50 8 
100 8 
1000 8 

P.S. また、あなたの行列の名前を持つように関数fprintfを使用することができます。
コード:

fileID = fopen('exp.txt','w'); 
REF=[0 6; 
    1 6; 
    2 6; 
    5 6; 
    10 6; 
    50 6; 
    100 6; 
    1000 6]; 
A1=[0 6; 
    1 3; 
    2 4; 
    5 4; 
    10 4; 
    50 4; 
    100 4; 
    1000 4]; 
A2=[0 8; 
    1 8; 
    2 8; 
    5 8; 
    10 8; 
    50 8; 
    100 8; 
    1000 8]; 
fprintf(fileID,'%s\n','REF = '); 
fprintf(fileID,'%d %d\n', REF); 
fprintf(fileID,'\n%s\n','A1 = '); 
fprintf(fileID,'%d %d\n', A1); 
fprintf(fileID,'\n%s\n','A2 = '); 
fprintf(fileID,'%d %d\n', A2); 
fclose(fileID); 

結果:

REF = 
0 1 
2 5 
10 50 
100 1000 
6 6 
6 6 
6 6 
6 6 

A1 = 
0 1 
2 5 
10 50 
100 1000 
6 3 
4 4 
4 4 
4 4 

A2 = 
0 1 
2 5 
10 50 
100 1000 
8 8 
8 8 
8 8 
8 8 

P.S.2

save('mydata.mat','REF', 'A1', 'A2'); 

その後、

load('mydata.mat'); 
+0

"append"は、単一の行列の最後にデータを追加します。しかし、私は、3つの行列すべてを別々の実体としてファイル内で利用できるようにしたい。だから私は別のプログラムにファイルを読み込むとき、私は3つの行列を取得する必要があります。 –

+0

@ Habib.Khan私はあなたの意味を理解していません。私の結果はA BとCをすべて持っていないのですか? –

+0

@ Habib.Khan上記の出力は、あなたが望むものとまったく同じです。行間を検出するためのプログラムを作成して、別々の行列の間を区切ることができます。これをしたくない場合は、テキストファイルを使用しないでください。実際のMATLAB MATファイルを使用して、3つの行列を保存します。これがMATLAB MATファイルの目的です。なぜあなたは車輪を再発明していますか?受け入れられたMATLABプラクティスに固執する。 – rayryeng

関連する問題