我知道我可以提取距离输入最近的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.Dataset
,ds
转换为一个数据帧,然后手动计算距离并得出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()
目前没有回答
相关问题 更多 >
编程相关推荐