gpt4 book ai didi

python-xarray:如何将多个波段和日期的单个波段栅格数据转换为 xarray-Dataset 或 DataArray?

转载 作者:行者123 更新时间:2023-11-28 17:10:03 26 4
gpt4 key购买 nike

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

数据来自每个图像日期的单独波段,我了解如何将每个波段日期转换为 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

最佳答案

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

合并这些数据需要多个步骤。首先,为每个 DataArrays 命名,并加上您希望它在其中结束的变量的名称。

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

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

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 ...

关于python-xarray:如何将多个波段和日期的单个波段栅格数据转换为 xarray-Dataset 或 DataArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48198288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com