0

15 エントリのデータテーブルがあります。C# の 2 点間の「浮動平均」を計算して、100 エントリのデータテーブルに変換したいと思います。

私が十分に明確かどうかはわかりませんが、私に知らせてください

4

2 に答える 2

1

@francops henri私はあなたが望むのはこれだと信じています:

public static void YourProcessName(DataTable dt, string columnName, int maxRows)
{
    var rcount = dt.Rows.Count;

    while (rcount < maxRows)
    {
        var max = (dt.Rows.Count - 1) * 2;

        for (var i = 0; i < max; i += 2)
        {
            var avg = ((double)dt.Rows[i][columnName] + (double)dt.Rows[i + 1][columnName]) / 2;

            var nRow = dt.NewRow();

            nRow[columnName] = avg;

            dt.Rows.InsertAt(nRow, i + 1);

            rcount++;

            if (rcount == maxRows) break;
        }
    }
}

このテストのように、列の型が double であることが重要です。

var dt = new DataTable();

dt.Columns.Add("Number", typeof(double));

for (double i = 0; i < 150; i += 10)
{
    var row = dt.NewRow();

    row["Number"] = i;

    dt.Rows.Add(row);
}

YourProcessName(dt, "Number", 100);

「Double」タイプを変更できますが、どこでも置き換えることを忘れないようにしてください。

于 2013-06-27T15:11:33.690 に答える
1

106 個の値の可能な解決策:

int k = 0;
double a;
double b;
double[] coarse;
double[] fine;

for (int i = 0; i < 15; i++)
    for (int j = 0; j < 7; j++)
    {
      a = 1.0 - j * 1.0/7;
      b = 1.0 - a;

      fine[k++] = a * coarse[i] + b * coarse[i+1];
    }

fine[k] = coarse[14];

これは、15個の元の値が配列coarse[]に格納されていることを前提としています。補間された値は、配列 fine[] で終わります。

于 2013-06-27T12:46:19.727 に答える