我有一个具有不同值的向量。 有些值是零,有时甚至是一个接一个。 我需要将这个向量映射到另一个具有相同大小的向量,但我不能在其中有零。 我可以对矢量进行某种插值的最佳方法是什么?我该怎么做? 我试着在mat-lab中阅读有关插值的内容,但我不太了解实现它。 如果有可能一步一步地向我解释,我会很感激,因为我是这个项目的新手。
由于
答案 0 :(得分:5)
从包含两个相等长度向量x
,y
的数据集开始,其中y
值等于零将被排除,首先选择不包括零的子集:
incld = y~=0;
然后插入该子集:
yn = interp1(x(incld),y(incld),x);
示例结果,针对x
(绿色)绘制y
,针对x
绘制yn
(红色):
编辑
请注意,通过插值的定义,如果终点为零,则必须单独处理,例如在上面的行之前运行以下内容:
if y(1)==0, y(1) = y(find(y~=0,1,'first'))/2; end
if y(end)==0, y(end) = y(find(y~=0,1,'last'))/2; end
编辑#2
这是上面的2D版本,其中数组X
和Y
是与2D数组Z
中的条目对应的坐标:
[nr nc]=size(Z);
[X Y] = meshgrid([1:nc],[1:nr]);
X2 = X;
Y2 = Y;
Z2 = Z;
excld = Z==0;
X2(excld) = [];
Y2(excld) = [];
Z2(excld) = [];
ZN = griddata(X2,Y2,Z2,X,Y);
ZN
包含插值点。
在下图中,零以暗蓝色斑块显示。左边是插值之前,右边是之后: