首页 > 解决方案 > C# 以采样率 x 通过 n 个数字有效地线性插值

问题描述

我有一个锯齿状浮点数组块float[][] chunks(例如,如果n = 3chunks[0]并且{1f, 5f, 10f}假设 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

我找到了一种使用 library 的方法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>锯齿状数组。该代码基本上模仿了用于插值的 2d 平面,而不仅仅是对数字本身进行插值(至少我认为)。MathNet.Numerics.Interpolate.Linear()需要两个双数组,这是我设法获得正确结果的唯一方法。然而,这需要永远。有一个更好的方法吗?

标签: c#.netinterpolationlinear-interpolation

解决方案


推荐阅读