xarray最近N点

2024-06-07 12:06:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道我可以提取距离输入最近的lat/long值

import xarray

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

但是有没有一种方法可以从最近的N个点快速提取任意数量的值呢?比如,如果我想在给定的lat/long中拉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()

Tags: totrue距离targetdataframedfdslong

热门问题