我有一个包含15个条目的数据表。我想通过计算c#中2个点之间的“浮动平均值”将其转换为100个条目的数据表。
我不知道我是否清楚只是让我知道
答案 0 :(得分: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 []中。 插值将以数组精细[]结束。
答案 1 :(得分: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;
}
}
}
重要的是,您的列类型应该像此测试一样加倍:
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);
您可以更改“双重”类型,但请确保您记得在任何地方更换。