二维散乱非均匀数据numpy / scipy的插值

时间:2016-03-03 22:47:54

标签: python numpy scipy interpolation

我有一个如下所示的数据文件:

1.0  2.1  2.4  3.0  3.1  3.2  3.7  3.9  4.2

1.3  1.6  1.8  1.9  2.8  2.9  3.7  3.9  4.0  4.4  4.7  4.9 

1.4  0.4  0.5  1.5  1.8  2.2  2.5  2.8  2.9  3.6

1.8  1.1  1.3  1.9  2.1  2.8  3.7  3.9  4.0  4.2  4.7  4.9  5.2  5.8

2.1  0.2  0.3  1.1  1.4  1.6  1.9 

这里第一列对应于x值(不均匀间隔),并且对于每个x值,该行中的其余数据是y值。我知道每行中y值的数量。原始数据文件有200个这样的行。对于这些x和y中的每一个,我有z(x,y)。现在我想对新网格进行2D插值,如下所示:

1.1  1.0  2.2  2.4

1.3  1.1  1.3  2.0  2.2

1.7  1.2  1.5  2.0  2.4

1.9  1.4  1.5  1.8  2.0  2.2  2.4
(40 such rows)

等等。这里和第一列之前一样是x(xnew)值,行中所有剩余的元素都是y(ynew)值,其中没有一个是均匀间隔的。我必须找到znew(xnew,ynew)。

我已尝试将R zalpha分别作为x yz尝试以下内容:

  1. z设置为2D数组,并将所有缺失值设置为nan。使用interpolate.interp2d。它说,

    No more knots can be added because the number of B-spline coefficients
        already exceeds the number of data points m. Probably causes: either
        s or m too small. (fp>s)
        kx,ky=1,1 nx,ny=128,129 m=16000 fp=nan s=0.000000
    and znew has only 0 or nan as values.
    
  2. f1=interpolate.griddata(R,z,alpha,method='linear')

    QH6154 qhull precision error: initial facet 1 is coplanar with the interior
    point
    ERRONEOUS FACET:
    
  3. f1=interpolate.RectBivariateSpline(R,z,alpha) 它给出了一个错误。

  4. 对此数据执行2D插值的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

RectBivariateSpline is for uniform grids only,所以你不能使用它。

否则,听起来你可能只是错误地输入数据 - 但我们无法分辨,因为你没有向我们展示代码的关键部分。对于不规则网格,x, y, z的{​​{1}}输入应具有相同的点数。你的投入是否真的如此? (在您致电interp2d之前,请打印interp2d等)如果这没有向您显示您做错了什么,请修改您的问题以显示minimal, complete, and verifiable example

答案 1 :(得分:1)

您对griddata的来电不正确。语法为griddata(points, values, xi, ...),其中:

  

<强> points :   ndarray of floats,shape(n,D)数据点坐标。能够   要么是形状(n,D)的数组,要么是ndim数组的元组。

     

<强> values :   浮点或复数的ndarray,shape(n,)数据值。

     

<强> xi :   浮动的ndarray,形状(M,D)插值的点   数据

如果我正确理解您的描述,您尝试插入的功能的格式为alpha = f(R, z)Rz指定alpha的坐标对数值进行了抽样Rzalpha都应该是相同长度的一维向量。如果这种解释是正确的,那么

  • values参数应为alpha

  • points应该是(n, 2)数组,其中包含连接在一起的Rz个向量。

  • 您还需要指定xi,它对应于评估插值的点(即您的&#34; xnew,ynew&#34;值)。这 alpha完全相同!

正如@Mike所提到的,RectBivariateSpline仅用于常规网格(就像interp2d一样),你当然不能通过用NaN填充缺失值来解决这个约束。