python xarray:如何将多个波段和日期的单个波段光栅数据转换为xarray数据集或数据阵列?
我想获取光栅(卫星图像)数据,并构建python xarray:如何将多个波段和日期的单个波段光栅数据转换为xarray数据集或数据阵列?,python,raster,satellite-image,xarray,rasterio,Python,Raster,Satellite Image,Xarray,Rasterio,我想获取光栅(卫星图像)数据,并构建数据集或数据阵列,以加快图像处理速度(我必须经常处理多波段、多日期的卫星图像) 数据作为每个图像日期的单独波段提供,我了解如何将每个波段日期转换为xarray-DataArray。我假设每个波段有一个变量是最有意义的,每个波段内有空间(x,y)和时间维度 d1 = xr.merge([d1_b4, d1_b5]) d2 = xr.merge([d2_b4, d2_b5]) <xarray.Dataset> Dimensions: (x: 3,
数据集
或数据阵列
,以加快图像处理速度(我必须经常处理多波段、多日期的卫星图像)
数据作为每个图像日期的单独波段提供,我了解如何将每个波段日期转换为xarray-DataArray
。我假设每个波段有一个变量是最有意义的,每个波段内有空间(x,y)和时间维度
d1 = xr.merge([d1_b4, d1_b5])
d2 = xr.merge([d2_b4, d2_b5])
<xarray.Dataset>
Dimensions: (x: 3, y: 3)
Coordinates:
* x (x) <U1 '1' '2' '3'
* y (y) <U1 'a' 'b' 'c'
Data variables:
band4 (x, y) int64 241 242 243 244 245 246 247 248 249
band5 (x, y) int64 251 252 253 254 255 256 257 258 259
然而,我不知道该怎么做
我一直在与一些虚拟乐队合作,试图弄清楚这一点,因此将包括这一点,以澄清我的数据看起来像什么以及我正在尝试做什么
# Set up dummy 3 x 3 array
dA = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# Create 4 dummy images; 2 bands for each of 2 dates (using bands 4 and 5,
# because they're useful for vegetation measures)
d1_b4 = xr.DataArray((dA + 140),
coords={'x': ['1', '2', '3'], 'y': ['a', 'b', 'c']}, dims=('x', 'y'))
d1_b5 = xr.DataArray((dA + 150),
coords={'x': ['1', '2', '3'], 'y': ['a', 'b', 'c']}, dims=('x', 'y'))
d2_b4 = xr.DataArray((dA + 240),
coords={'x': ['1', '2', '3'], 'y': ['a', 'b', 'c']}, dims=('x', 'y'))
d2_b5 = xr.DataArray((dA + 250),
coords={'x': ['1', '2', '3'], 'y': ['a', 'b', 'c']}, dims=('x', 'y'))
# dummy values designed so I can keep track of which array is going
# where while I learn this
然后我想把它们组合成一个数据数组
,带有两个变量(Band4和Band5),每个变量都包含两个图像日期。。。但我不知道该怎么做
当我创建/导入数组时,是否需要添加更多坐标或维度,然后沿着这些维度添加
concat
?正如贾曼所提到的,很大程度上取决于数据的来源,以确定如何组合数据。这是一种组合您提出的数据的方法,但还有其他方法
合并此数据需要多个步骤。首先,将每个数据数组
命名为您希望其结束的变量的名称
d1_b4.name = 'band4'
d1_b5.name = 'band5'
d2_b4.name = 'band4'
d2_b5.name = 'band5'
然后使用将它们放入xarray.Dataset
s。Dataset
包含多个xarray.DataArray
s,它们可以共享部分或全部维度
d1 = xr.merge([d1_b4, d1_b5])
d2 = xr.merge([d2_b4, d2_b5])
<xarray.Dataset>
Dimensions: (x: 3, y: 3)
Coordinates:
* x (x) <U1 '1' '2' '3'
* y (y) <U1 'a' 'b' 'c'
Data variables:
band4 (x, y) int64 241 242 243 244 245 246 247 248 249
band5 (x, y) int64 251 252 253 254 255 256 257 258 259
您看过从rasterio:将光栅加载到xarray的文档了吗?我不清楚你为什么要像这样从头开始构建多波段阵列。谢谢Damien!回答得很好。有了这样的解释,我希望你是在写xarray文档。