C#通过采样率x有效地线性插值n个数字

时间:2018-08-04 19:28:15

标签: c# .net interpolation linear-interpolation

我有一个锯齿状的浮点数组块(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()采用两个双精度数组,这是我设法获得正确结果的唯一方法。但是,这需要永远。有一个更好的方法吗?

0 个答案:

没有答案