2

同じ測定結果を含むいくつかのテーブル ファイルを取得しましたが、わずかな違いにより、データ ポイントのx値とy値が異なります。しかし、6 つのファイルすべての平均が必要です。2 つの (短縮された) サンプル ファイルを次に示します。

# file1.dat
  9.840000000000000E+00  1.680000000000000E+02
  9.840071206052514E+00  1.730000000000000E+02
  9.840142412105029E+00  1.630000000000000E+02
  9.840213618157543E+00  1.730000000000000E+02
  9.840284824210057E+00  1.690000000000000E+02
  9.840356030262573E+00  1.720000000000000E+02
  9.840427236315087E+00  1.660000000000000E+02
  9.840498442367601E+00  1.750000000000000E+02
  9.840569648420116E+00  1.650000000000000E+02
  9.840640854472630E+00  1.720000000000000E+02

# file2.dat
  9.840000000000000E+00  1.720000000000000E+02
  9.840071016422547E+00  1.760000000000000E+02
  9.840142032845096E+00  1.610000000000000E+02
  9.840213049267643E+00  1.530000000000000E+02
  9.840284065690192E+00  1.590000000000000E+02
  9.840355082112739E+00  1.590000000000000E+02
  9.840426098535286E+00  1.690000000000000E+02
  9.840497114957834E+00  1.790000000000000E+02
  9.840568131380381E+00  1.680000000000000E+02
  9.840639147802928E+00  1.620000000000000E+02

[さらに 4 つの同様のファイルが…]

gnuplot各テーブルを独自の曲線としてプロットすると、次のようになります
gnuplot

しかし、6 つのテーブルすべての平均を示す 1 つの曲線が必要です。

試してみjoinましたが、結果として空のファイルが得られ、最初の列 ( x値) に各ファイルに同じ値が含まれていないため、機能しないと思います。gnuplotwith で合計を実行しようとしてもplot data1 u 1:2 + data2 u 1:2失敗します。

複数のデータ ファイルを結合して 1 つのグラフにプロットすることがわかりましたが、ファイルを結合するだけでは役に立ちません。


私は Mac OS X を使用していますが、Ubuntu にアクセスできるので、そのためのツールがあれば…</p>


スクリプトの新しい出力

> AVDEBUG=1 octave -qf avfiles.m messung3.dat messung4.dat
warning: ================
warning: processing file: messung3.dat
warning: size of the matrix in the file: 2248      3
warning: min(x): 0.000000e+00
warning: max(x): 0.000000e+00
warning: min(y): 9.840000e+00
warning: max(y): 1.000000e+01
warning: ================
warning: processing file: messung4.dat
warning: size of the matrix in the file: 2254      3
warning: min(x): 0.000000e+00
warning: max(x): 0.000000e+00
warning: min(y): 9.840000e+00
warning: max(y): 1.000000e+01
warning: yp is undefined at 2248 points

必要に応じて、ここ (tweh.de/texsx/data-files-avarage.zip)から私のデータ ファイルをダウンロードできます。平均は、すべてのファイルから作成する必要があります。

4

1 に答える 1

1

オクターブで楽です。ファイルを作成しますavfiles.m。使用法:

octave -qf avfiles.m file1.dat file2.dat

octave -q --eval "test avfiles"テスト データを含むファイルを作成しますaux_file[0-9]

avfiles.m:

#!/usr/bin/octave -qf
# Average y values in several files
# Usage:
# octave -qf avfiles.m aux_file0 aux_file1 aux_ file2

if isempty(getenv("AVDEBUG"))
  warning ("off", "avfiles")
endif

setenv("LC_NUMERIC", "C"); 

arg_list = argv ();
for k = 1:nargin
  fname = arg_list{k};
    warning ("avfiles", "================");
    warning ("avfiles", "processing file: %s", fname);
    data = dlmread(fname);
    warning ("avfiles", "size of the matrix in the file: %s", num2str(size(data)));
    x = data(:, 1);
    y = data(:, 2);
    warning ("avfiles", "min(x): %e", min(x));
    warning ("avfiles", "max(x): %e", max(x));
    warning ("avfiles", "min(y): %e", min(y));
    warning ("avfiles", "max(y): %e", max(y));
    [x, idx] = sort(x);
    y = y(idx);
    if k==1
      % use x values from the first file
      xp = x; yp = y;
    else
      yp = 1/k * ( (k-1)*yp + interp1(x, y, xp) );
      warning ("avfiles", "yp is undefined at %d points", sum(isnan(yp)));
    endif
endfor

idx = !isnan(yp);
dlmwrite("/dev/stdout", [xp(idx), yp(idx)], ' ');

%!test
%! n = 100;
%! for k=0:9
%!   x = unifrnd(0, 2*pi, n, 1);
%!   y = sin(x) + 0.05*stdnormal_rnd(n, 1);
%!   dlmwrite(sprintf("aux_file%i", k), [x y], " ");
%! end
%! system("octave -qf avfiles.m aux_file[0-9] > aux_out");
%! data = dlmread("aux_out");
%! x = data(:, 1); y = data(:, 2);
%! assert(sin(x), y, 0.08);

実行AVDEBUG=1 octave -qf avfiles.m file1.dat file2.datしてトレースを取得します。サンプルファイルを使用すると、次のようになります。

warning: ================
warning: processing file: file1.dat
warning: size of the matrix in the file: 10    2
warning: min(x): 9.840000e+00
warning: max(x): 9.840639e+00
warning: min(y): 1.530000e+02
warning: max(y): 1.790000e+02
warning: ================
warning: processing file: file2.dat
warning: size of the matrix in the file: 10    2
warning: min(x): 9.840000e+00
warning: max(x): 9.840641e+00
warning: min(y): 1.630000e+02
warning: max(y): 1.750000e+02
warning: yp is undefined at 0 points
于 2013-04-13T17:59:15.013 に答える