当pythons xarray模块中每个像素的范围不同时,是否可以按时间范围选择数据集
Is it possible to selecting dataset by time range when range is different for every pixel in pythons xarray module
我尝试select在特定时间范围内只select这部分数据,每个像素都不同。
为了索引,我有两个 np.datetime64[ns] xr.DataArrays 形状为 (lat:152, lon:131) 名为 time_range_min, time_range_max
一个是开始日期,另一个是结束日期。
我尝试这个 selecting 数据
dataset = data.sel(time=slice(time_range_min, time_range_max))
但它产生了
cannot use non-scalar arrays in a slice for xarray indexing:
<xarray.DataArray 'NDVI' (lat: 152, lon: 131)>
如果我不能使用非标量数组,这意味着通常不可能这样做,或者我可以转换我的数组吗?
如果“时间”是从过去到现在排序的字符串中的日期列表(例如 ["10-20-2021", "10-21-2021", ...]:
import numpy as np
listOfMinMaxTimeRanges = [time_range_min, time_range_max]
specifiedRangeOfTimeIndexedList = []
for indexingListOfMinMaxTimeRanges in range(np.shape(listOfMinMaxTimeRanges)[1])):
specifiedRangeOfTimeIndexed = [specifiedRangeOfTime for specifiedRangeOfTime in np.arange(0, len(time), 1) if time.index(listOfMinMaxTimeRanges[0][indexingListOfMinMaxTimeRanges]) <= specifiedRangeOfTime <= time.index(listOfMinMaxTimeRanges[1][indexingListOfMinMaxTimeRanges])]
for indexes in range(len(specifiedRangeOfTimeIndexed)):
specifiedRangeOfTimeIndexedList.append(specifiedRangeOfTimeIndexed[indexes])
取决于您的数据集的结构:
dataset = data.sel(time = specifiedRangeOfTimeIndexedList)
或
dataset = data.sel(time = time[specifiedRangeOfTimeIndexedList])
或
dataset = dataset[time[specifiedRangeOfTimeIndexedList]]
或
dataset = dataset[:, time[specifiedRangeOfTimeIndexedList]]
或
dataset = dataset[time[specifiedRangeOfTimeIndexedList], :, :]
或
dataset = dataset[specifiedRangeOfTimeIndexedList]
...
我找到了一种在 xarray 中用 stacking 对每个单元格进行分组的方法:
time_range_min 和 time_range_max 现在标记为一个日期
stack = dataset.value.stack(gridcell=['lat', 'lon'])
for unique_value, grouped_array in stack.groupby('gridcell'):
grouped_array.sel(time=slice(time_range_min,time_range_max))
我尝试select在特定时间范围内只select这部分数据,每个像素都不同。
为了索引,我有两个 np.datetime64[ns] xr.DataArrays 形状为 (lat:152, lon:131) 名为 time_range_min, time_range_max 一个是开始日期,另一个是结束日期。
我尝试这个 selecting 数据
dataset = data.sel(time=slice(time_range_min, time_range_max))
但它产生了
cannot use non-scalar arrays in a slice for xarray indexing: <xarray.DataArray 'NDVI' (lat: 152, lon: 131)>
如果我不能使用非标量数组,这意味着通常不可能这样做,或者我可以转换我的数组吗?
如果“时间”是从过去到现在排序的字符串中的日期列表(例如 ["10-20-2021", "10-21-2021", ...]:
import numpy as np
listOfMinMaxTimeRanges = [time_range_min, time_range_max]
specifiedRangeOfTimeIndexedList = []
for indexingListOfMinMaxTimeRanges in range(np.shape(listOfMinMaxTimeRanges)[1])):
specifiedRangeOfTimeIndexed = [specifiedRangeOfTime for specifiedRangeOfTime in np.arange(0, len(time), 1) if time.index(listOfMinMaxTimeRanges[0][indexingListOfMinMaxTimeRanges]) <= specifiedRangeOfTime <= time.index(listOfMinMaxTimeRanges[1][indexingListOfMinMaxTimeRanges])]
for indexes in range(len(specifiedRangeOfTimeIndexed)):
specifiedRangeOfTimeIndexedList.append(specifiedRangeOfTimeIndexed[indexes])
取决于您的数据集的结构:
dataset = data.sel(time = specifiedRangeOfTimeIndexedList)
或
dataset = data.sel(time = time[specifiedRangeOfTimeIndexedList])
或
dataset = dataset[time[specifiedRangeOfTimeIndexedList]]
或
dataset = dataset[:, time[specifiedRangeOfTimeIndexedList]]
或
dataset = dataset[time[specifiedRangeOfTimeIndexedList], :, :]
或
dataset = dataset[specifiedRangeOfTimeIndexedList]
...
我找到了一种在 xarray 中用 stacking 对每个单元格进行分组的方法: time_range_min 和 time_range_max 现在标记为一个日期
stack = dataset.value.stack(gridcell=['lat', 'lon'])
for unique_value, grouped_array in stack.groupby('gridcell'):
grouped_array.sel(time=slice(time_range_min,time_range_max))