2

float データを含む 3 つの txt ファイルがあります。各ファイルには 17 行あります。最初のファイルには 3 つの列があり、他の 2 つのファイルにはそれぞれ 1 つの列があります。これらのファイルを 1 つの大きなファイルに連結して、1 つのファイルにこれらのファイルの 5 つの列があるようにしようとしています。私はこれをやっている:

alldata = [ ];        
  fid2 = fopen(CombinAttrDiff, 'wt')        
NumberOfFiles = 3        
for K = 1 : NumberOfFiles   %looping over all of the files        
thisfile = sprintf('AttrDiff%d.txt',K)        
thisdata = load(thisfile);        
 alldata = [alldata, thisdata];         
end        
      fprintf(fid2, '%f %f %f %f %f\n',alldata);        
fclose all           

印刷される大きな出力ファイルは、ファイルを垂直方向に連結しません。最初のファイルの最初の列のすべての値は、大きな出力ファイルの行ごとに入力され、次に 2 番目の列を取り、行ごとに入力を続けます。ここで何が間違っていますか?また、後でマトリックスとして使用するために、ファイルを1つのファイルに連結する正しい方法です。新しく作成されたファイルの各行を、この a=[0.32588 0.58425 0.35887 0.00004 0.75544] のようなベクトル配列にしたい。これらの行(配列)を後で比較できるように、これが必要です。後でマトリックスを取得するために、大きなファイルに reshape を適用することを計画していました。

私はmatlabの初心者で、すでに数日でこれを機能させようとしていました.どんな助けでも大歓迎です! ありがとう!

4

1 に答える 1

2

試す

fprintf( fid2, '%f %f %f %f %f\n', alldata.');

編集: なぜこの変更が機能するのですか?

Matlab はその配列を「列スタック」方式でメモリに保存します。つまり、メモリ内の 2 番目の要素はalldata(2,1)です。そのため、matlabに印刷alldataするfid2と、指定した書式設定文字列に関係なく、「メモリ内」の順序に従って要素が並べ替えられます。配列を転置すると、目的に合わせて順序が変更されます。

于 2013-01-07T12:28:12.443 に答える