线性插值算法

项目实现中遇到了一个插值问题。给我们提供的数据是一个 120*160 的矩阵,其中还有很多空值,去除空值大概也会剩下 70*70 的矩阵,所以需要采用插值函数扩大矩阵。先扩大每一行,再扩大每一列。本次采用的是线性插值,算法简单运行也快。
核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using Newtonsoft.Json.Linq;
private JArray ChaZhi(JArray d,double a)
{
JArray ret=d;
double startVal = double.NaN;
double endVal = double.NaN;
int startPos = -1;
int endPos = -1;
for (int i = 0; i < ret.Count(); i++)
{
if ((double)ret[i]!=a)
{
if (startPos==-1)
{
startPos = i;startVal = (double)ret[i];
}
else
{
endPos = i;endVal = (double)ret[i];
double inc=(endVal-startVal)/(endPos-startPos);
for (int j = startPos+1; j < endPos; j++)
{
ret[j] = startVal + (j - startPos) * inc;
}
startPos = i; startVal = (double)ret[i];
}
}
}
return ret;
}