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文档。