5

我想获取栅格(卫星图像)数据,并构建一个Datasetor DataArray,以加快我的图像处理速度(我必须经常处理多波段、多日期的卫星图像)。

数据作为每个图像日期的单独波段出现,我了解如何将每个波段日期转换为 xarray- DataArray。我认为为每个波段设置一个变量是最有意义的,并且在每个波段内都有空间(x,y)和时间维度。

但是,我不知道该怎么做。

我一直在与一些虚拟乐队合作以试图解决这个问题,因此将包括在内以澄清我的数据是什么样子以及我正在尝试做什么。

# 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

然后我想将它们组合成一个DataArray,带有两个变量(Band4 和 Band5),每个变量都包含两个图像日期......但不知道如何进行。

创建/导入数组时是否需要添加更多坐标或维度,然后concat沿着这些维度添加?

4

1 回答 1

3

正如 jhamman 所提到的,很大程度上取决于您的数据来自哪里来确定如何组合它。这是组合您提出的数据的一种方法,但还有其他方法。

组合这些数据需要多个步骤。首先,将每个 ,DataArrays命名为您希望它结束​​的变量的名称。

d1_b4.name = 'band4'
d1_b5.name = 'band5'
d2_b4.name = 'band4'
d2_b5.name = 'band5'

然后使用xr.merge将它们放入xarray.Datasets 中。ADataset包含多个xarray.DataArrays,它们可以共享它们的部分或全部维度。

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

最后,结合不同日期的数据。我们需要一个新的维度time,每个日期都有坐标值。我们可以使用xr.concat.

xr.concat([d1, d2], dim=pd.Index([1990, 1991], name='time'))

<xarray.Dataset>
Dimensions:  (time: 2, x: 3, y: 3)
Coordinates:
  * x        (x) <U1 '1' '2' '3'
  * y        (y) <U1 'a' 'b' 'c'
  * time     (time) int64 1990 1991
Data variables:
    band4    (time, x, y) int64 141 142 143 144 145 146 147 148 149 241 242 ...
    band5    (time, x, y) int64 151 152 153 154 155 156 157 158 159 251 252 ...
于 2018-01-11T01:59:42.550 回答