我一直在研究如何使用scipy.interpolate函数(LinearNDInterpolator,griddata或最好是NearestNDInterpolator)
在线上有一些教程,但是我很困惑我的数据需要采用什么形式。 最接近ND的在线文档非常糟糕。
该功能要求:
x : (Npoints, Ndims) ndarray of floats
Data point coordinates.
y : (Npoints,) ndarray of float or complex
Data point values.
我有以下形式的数据:xarray数据集内保存的纬度,经度,数据,时间。我要填写的数据中有一些空白。
我不知道如何告诉我的x点函数。 我已经尝试过(lat,long)作为元组和np.meshgrid(lat,long),但似乎无法解决问题。
有关如何将经纬度坐标传递到函数中的任何帮助?时间坐标的加分点也可以使第三个维度的估算更加可靠。
谢谢!
答案 0 :(得分:1)
i have tried (lat,long) as a tuple
If lat
and long
are 1D arrays or lists, try this:
points = np.array((lat, long)).T # make a 2D array of shape Npoints x 2
nd = NearestNDInterpolator(points, data)
The you can compute interpolated values as nd(lat1, long1)
, etc.
答案 1 :(得分:0)
Scipy为非结构化数据和规则放置在网格上的数据点提供multivariate interpolation methods。非结构化数据意味着可以将数据提供为无序点列表。您的数据似乎是结构化的:它是一个大小数组(480、2040)。但是,NearestNDInterpolator
适用于非结构化数据。 flatten
方法可用于将数组转换为值(长度为480 * 2040)的列表(1d)。必须对坐标执行相同的操作。 meshgrid
用于获取网格中每个点的坐标,flatten
再次用于获取2d坐标的“列表”(形状为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并不是什么大问题,因为它只是列表中的一个缺失点,除了缺失点的坐标也必须从列表中删除。