微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xarray最近的N个点

如何解决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 举报,一经查实,本站将立刻删除。