xarray最近的N个点

问题描述

我知道我可以提取最接近我输入的纬度/经度的值

import xarray

ds = xarray.open_dataset('/path/to/netcdf.nc')
single_val = ds['Band1'].sel(longitude=target_long,latitude=target_lat,method='nearest')

但是有没有办法从最近的 N 个点中快速提取任意数量的值?就像我想为给定的纬度/经度拉取 9 个最近的点(3 x 3 网格)。

我意识到我可以将 xarray.core.dataset.Datasetds 转换为数据帧,然后手动计算距离并提取 9 个最近点的平均值,但计算距离是速率限制步骤。有没有更快的方法

from vincenty import vincenty

# convert to dataframe
df = ds['Band1'].to_dataframe()
df.reset_index(drop=False,inplace=True)  # set 'latitude' and 'longitude' columns

# calculate distance from my lat/long to all lat/longs in the dataframe
# this is the step I want to avoid,can take a very long time ~20+ mins for my data
df['distance'] = df[['latitude','longitude']].apply(lambda latlong: vincenty(latlong,(target_lat,target_long)),axis=1)

# sort by closest points
df2.sort_values(by='distance',ascending=True,inplace=True)

# get nearest 9 points and calculate average 
avg_vals = df2['Band1'].loc[range(9)].mean()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)