Python NaNs上的scipy ND插值

Python NaNs上的scipy ND插值,python,numpy,scipy,interpolation,python-xarray,Python,Numpy,Scipy,Interpolation,Python Xarray,我一直很难弄清楚如何使用scipy.interpolator函数(线性插值函数、网格数据插值函数或最接近插值函数) 网上有一些教程,但我不知道我的数据需要以什么形式出现。 nearestND的在线文档非常糟糕 该函数要求: x : (Npoints, Ndims) ndarray of floats Data point coordinates. y : (Npoints,) ndarray of float or complex Data p

我一直很难弄清楚如何使用scipy.interpolator函数(线性插值函数、网格数据插值函数或最接近插值函数)

网上有一些教程,但我不知道我的数据需要以什么形式出现。 nearestND的在线文档非常糟糕

该函数要求:

    x : (Npoints, Ndims) ndarray of floats
         Data point coordinates.
    y : (Npoints,) ndarray of float or complex
         Data point values.
我的数据格式为:lat、long、data、保存在xarray数据集中的时间。我想填补的数据中有一些空白

我不明白如何告诉函数我的x点。 我尝试过(lat,long)作为元组和np.meshgrid(lat,long),但似乎无法实现

有没有关于如何将纬度和长坐标传递到函数中的帮助?时间坐标的额外点数,使估计在第三维中更加稳健

谢谢

我试过(lat,long)作为元组

如果
lat
long
是1D数组或列表,请尝试以下操作:

points = np.array((lat, long)).T # make a 2D array of shape Npoints x 2
nd = NearestNDInterpolator(points, data)
您可以将插值计算为
nd(lat1,long1)
等。

Scipy提供了非结构化数据和定期放置在网格上的数据点。非结构化数据意味着数据可以作为非有序点列表提供。您的数据似乎是结构化的:它是一个大小不同的数组(4802040)。但是,最接近的NDinterpolator可用于非结构化数据。
flatte
方法可用于将数组转换为值列表(1d)(长度为480*2040)。坐标也必须如此
meshgrid
用于获得网格中每个点的坐标,同样地,
Flatte
用于获得二维坐标的“列表”(形状为480*2040 x 2的数组)

下面是一个从结构化数据到非结构化数据的示例:

import numpy as np

lat = np.linspace(2, 6, 10)
lon = np.linspace(5, 9, 14)

latM, lonM = np.meshgrid(lat, lon)  # M is for Matrix

dataM = np.sin(latM)*np.cos(lonM)  # example of data, Matrix form

from scipy.interpolate import NearestNDInterpolator

points = np.array((latM.flatten(), lonM.flatten())).T
print( points.shape )
# >>> (140, 2)

f_nearest = NearestNDInterpolator(points, dataM.flatten())
f_nearest(5, 5)

在这种情况下,使用NAN不应该是一个大问题,因为它只是列表中的一个缺失点,但缺失点的坐标也必须从列表中删除

NaN
与这个问题有什么关系(除了标题中的内容)?您能否添加一个数据示例,您尝试了什么以及您得到的错误?谢谢您的回答。是的,它们是1D列表。这让我非常兴奋,但似乎仍然不起作用。ValueError:不同数量的值和点不受顺序或形式的影响,都是相同的错误。我的元组是(lat[480],long[2040]),数据是相同的:(4802040)。看起来这应该可以工作,但今天感觉不太好。@NicPittman“我的元组是
(lat[480],long[2040])
数据是一样的:
(480,2040)
”。现在还不清楚480和2040代表什么。你真的需要用更详细的数据示例以及如何调用函数来更新你的问题。太好了!非常感谢您的帮助和解释。似乎在工作!看起来我认为函数做了一些不同的事情。CloughtoHer2dInterpolator、矩形二元样条线和interp2d看起来可能会这样做?有没有什么函数可以帮助我自动填充整个数据集,而不是用这种方法一次通过像素?