Matlab Griddata 插值:Duplicate x-y data points detected
2014-03-13 16:34阅读:
在matlab里面,当你用griddata函数插值的时候,有时候会出现这样的警告:
Warning: Duplicate x-y data points detected: using average of the z values.
大概意思就是,你的(x,y) 坐标值出现了重复的点,计算时会取z的平均值来计算。
我的数据大概有两百万对,一个个检查有没有重复可不是什么好办法。好在看见网上有人出了一个很聪明的方法:先建立一个新的矩阵A,使得A=x+sqrt(-1)*y. 这样就使得xy坐标变成了一个复数。接着借助unique()函数,这个函数可以判断出一个矩阵中所有不重复的值。举个例子,如果A=[1 1 2 3 4 5 5 6], unique(A)=[1 2 3 4 5 6],因为A中出现了1到6. 这样利用unique(x+sqrt(-1)*y)就可以判断出数组中有没有重复的了。
可是我的数据经过这样的处理,发现并没有重复的xy值。这是怎么回事?
查询matlab的help文件,上面有这么一句话:
'this means that there are two or more data points where the input values (x, y) are the same or very close together.'
这就是说,如果两个值差得很近,也许也会被当做一样来处理?关键是,这个小,究竟是多小?我们来看看griddata()的源代码是怎么说。这一段如下:
____________________________________________________________________________
% Sort x and y so duplicate points can be averaged before passing to delaunay need x,y and z to be column vectors
sz = numel(x);
x = reshape(x,sz,1);y = reshape(y,sz,1);z = reshape(z,sz,1);sxyz = sortrows([x y z],[2 1]);
x = sxyz
Warning: Duplicate x-y data points detected: using average of the z values.
大概意思就是,你的(x,y) 坐标值出现了重复的点,计算时会取z的平均值来计算。
我的数据大概有两百万对,一个个检查有没有重复可不是什么好办法。好在看见网上有人出了一个很聪明的方法:先建立一个新的矩阵A,使得A=x+sqrt(-1)*y. 这样就使得xy坐标变成了一个复数。接着借助unique()函数,这个函数可以判断出一个矩阵中所有不重复的值。举个例子,如果A=[1 1 2 3 4 5 5 6], unique(A)=[1 2 3 4 5 6],因为A中出现了1到6. 这样利用unique(x+sqrt(-1)*y)就可以判断出数组中有没有重复的了。
可是我的数据经过这样的处理,发现并没有重复的xy值。这是怎么回事?
查询matlab的help文件,上面有这么一句话:
'this means that there are two or more data points where the input values (x, y) are the same or very close together.'
这就是说,如果两个值差得很近,也许也会被当做一样来处理?关键是,这个小,究竟是多小?我们来看看griddata()的源代码是怎么说。这一段如下:
____________________________________________________________________________
% Sort x and y so duplicate points can be averaged before passing to delaunay need x,y and z to be column vectors
sz = numel(x);
x = reshape(x,sz,1);y = reshape(y,sz,1);z = reshape(z,sz,1);sxyz = sortrows([x y z],[2 1]);
x = sxyz
