scipy AND 对 NaN 进行插值
scipy ND Interpolating over NaNs
我一直无法弄清楚如何使用 scipy.interpolate 函数(LinearNDInterpolator、griddata 或最好是 NearestNDInterpolator)
网上有一些教程,但我很困惑我的数据需要采用什么形式。
nearestND 的在线文档很糟糕。
函数要求:
x : (Npoints, Ndims) ndarray of floats
Data point coordinates.
y : (Npoints,) ndarray of float or complex
Data point values.
我有以下形式的数据:lat,long,data,time 保存在 xarray 数据集中。数据有些不足我想补上
我不明白如何告诉函数我的 x 点。
我已经尝试将 (lat,long) 作为元组和 np.meshgrid(lat,long) 但似乎无法实现。
关于如何将我的经纬度坐标传递给函数的任何帮助?时间坐标的奖励点以及通过第三维度使估计更稳健。
谢谢!
i have tried (lat,long) as a tuple
如果 lat
和 long
是一维数组或列表,试试这个:
points = np.array((lat, long)).T # make a 2D array of shape Npoints x 2
nd = NearestNDInterpolator(points, data)
您可以将内插值计算为 nd(lat1, long1)
,等等
Scipy 为非结构化数据和定期放置在网格上的数据点提供 multivariate interpolation methods。非结构化数据意味着数据可以作为无序点列表提供。您的数据似乎是结构化的:它是一个大小为 (480, 2040) 的数组。但是,NearestNDInterpolator
适用于非结构化数据。 flatten
方法可用于将数组转换为值列表 (1d)(长度为 480*2040)。坐标也必须这样做。 meshgrid
用于获取网格每个点的坐标,再次 flatten
用于获取 "list" 的二维坐标(形状为 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 应该不是什么大问题,因为它只是列表中的一个缺失点,除了缺失点的坐标也必须从列表中删除。
我一直无法弄清楚如何使用 scipy.interpolate 函数(LinearNDInterpolator、griddata 或最好是 NearestNDInterpolator)
网上有一些教程,但我很困惑我的数据需要采用什么形式。 nearestND 的在线文档很糟糕。
函数要求:
x : (Npoints, Ndims) ndarray of floats
Data point coordinates.
y : (Npoints,) ndarray of float or complex
Data point values.
我有以下形式的数据:lat,long,data,time 保存在 xarray 数据集中。数据有些不足我想补上
我不明白如何告诉函数我的 x 点。 我已经尝试将 (lat,long) 作为元组和 np.meshgrid(lat,long) 但似乎无法实现。
关于如何将我的经纬度坐标传递给函数的任何帮助?时间坐标的奖励点以及通过第三维度使估计更稳健。
谢谢!
i have tried (lat,long) as a tuple
如果 lat
和 long
是一维数组或列表,试试这个:
points = np.array((lat, long)).T # make a 2D array of shape Npoints x 2
nd = NearestNDInterpolator(points, data)
您可以将内插值计算为 nd(lat1, long1)
,等等
Scipy 为非结构化数据和定期放置在网格上的数据点提供 multivariate interpolation methods。非结构化数据意味着数据可以作为无序点列表提供。您的数据似乎是结构化的:它是一个大小为 (480, 2040) 的数组。但是,NearestNDInterpolator
适用于非结构化数据。 flatten
方法可用于将数组转换为值列表 (1d)(长度为 480*2040)。坐标也必须这样做。 meshgrid
用于获取网格每个点的坐标,再次 flatten
用于获取 "list" 的二维坐标(形状为 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 应该不是什么大问题,因为它只是列表中的一个缺失点,除了缺失点的坐标也必须从列表中删除。