如何将15个条目的数据表平滑为100个条目

本文关键字:平滑 100个 数据表 15个 | 更新日期: 2023-09-27 18:20:11

我有一个包含15个条目的数据表。我想通过计算c#中2个点之间的"浮动平均值",将其转换为一个包含100个条目的数据表。

我不知道我是否足够清楚,只是让我知道

如何将15个条目的数据表平滑为100个条目

@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;
        }
    }
}

重要的是,你的专栏的类型是双重的,就像这个测试:

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"类型,但一定要记住在任何地方都要替换。

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个原始值存储在array coarse[]中。插值将以数组fine[]结束。