我有一个锯齿状的浮点数组块(float[][] chunks
),我想以x的采样率对每个浮点块(长度为n)进行插值。例如,如果chunks[0]
是{1f, 5f, 10f}
,那么n = 3并假设x = 12,我想要:
1.0000
1.7273
2.4545
3.1818
3.9091
4.6364
5.4545
6.3636
7.2727
8.1818
9.0909
10.0000
我已经找到了使用库MathNet.Numerics
来执行此操作的方法,但是它效率很低。我的代码如下。
double[] d = new double[n];
d[0] = 1d;
for (int i = 1; i < d.Length; i++)
d[i] = d[i - 1] + (double)(x - 1)/(double)(n - 1);
for (int c = 0; c < chunks.Length; c++)
for (int j = 0; j < x; j++)
doubles.Add(Convert.ToSingle(Interpolate.Linear(d, chunks[c].Select(y => Convert.ToDouble(y))).Interpolate(j + 1)));
然后我将List<double>
解析回锯齿状的数组。
这段代码基本上模仿了二维平面进行插值,而不仅仅是对数字本身进行插值(至少我认为是这样)。 MathNet.Numerics.Interpolate.Linear()
采用两个双精度数组,这是我设法获得正确结果的唯一方法。但是,这需要永远。有一个更好的方法吗?