问题说明
笔者在利用xr.open_mfdataset读数据后,输出结果显示数据是类型。
输入:
dataset_remss = xr.open_mfdataset(files_remss)
sst=dataset_remss.analysed_sst
sst
- 1
- 2
- 3
输出:
<xarray.DataArray 'analysed_sst' (time: 1825, lat: 2048, lon: 4096)>
dask.array<concatenate, shape=(1825, 2048, 4096), dtype=float32, chunksize=(1, 2048, 4096), chunktype=numpy.ndarray>
Coordinates:
* lat (lat) float32 -89.96 -89.87 -89.78 -89.69 ... 89.78 89.87 89.96
* lon (lon) float32 -180.0 -179.9 -179.8 -179.7 ... 179.8 179.9 180.0
* time (time) datetime64[ns] 2016-01-01T12:00:00 ... 2020-12-31T12:00:00
Attributes:
units: K
long_name: analysed sea surface temperature
standard_name: sea_surface_foundation_temperature
valid_min: -200
valid_max: 5000
source: OBPG-L3C-MODIS_Aqua,OBPG-L3C-MODIS_Terra,OSPO-L3C-VIIRS_N...
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
并且在经过一系列计算后,一直看不到结果。
解决方法
在经过一番搜索后,得知问题所在。
为什么结果不能直接显示出数值呢?对进行的计算实际上是在 构建抽象的计算图,在你要求显示结果之前,不会计算任何内容。简单来说,对的操作是告诉计算机“我想对这组数据进行ABCD操作”,而实际上计算机并没有进行任何操作,只是把你想进行的操作记录下来。
那么,为了进行实际计算,我们可以:
1. 使用compute()函数:
sst[0].compute()
- 1
即可运行计算,并显示结果。此时,结果仍然为DataArray类型
<xarray.DataArray 'analysed_sst' (lat: 2048, lon: 4096)>
array([[ nan, nan, nan, ..., nan, nan, nan],
[ nan, nan, nan, ..., nan, nan, nan],
[ nan, nan, nan, ..., nan, nan, nan],
...,
[271.35, 271.35, 271.35, ..., 271.35, 271.35, 271.35],
[271.35, 271.35, 271.35, ..., 271.35, 271.35, 271.35],
[271.35, 271.35, 271.35, ..., 271.35, 271.35, 271.35]],
dtype=float32)
Coordinates:
* lat (lat) float32 -89.96 -89.87 -89.78 -89.69 ... 89.78 89.87 89.96
* lon (lon) float32 -180.0 -179.9 -179.8 -179.7 ... 179.8 179.9 180.0
time datetime64[ns] 2016-01-01T12:00:00
Attributes:
units: K
long_name: analysed sea surface temperature
standard_name: sea_surface_foundation_temperature
valid_min: -200
valid_max: 5000
source: OBPG-L3C-MODIS_Aqua,OBPG-L3C-MODIS_Terra,OSPO-L3C-VIIRS_N...
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
2. 使用values
sst.values
- 1
结果为数组array:
array([[ nan, nan, nan, ..., nan, nan, nan],
[ nan, nan, nan, ..., nan, nan, nan],
[ nan, nan, nan, ..., nan, nan, nan],
...,
[271.35, 271.35, 271.35, ..., 271.35, 271.35, 271.35],
[271.35, 271.35, 271.35, ..., 271.35, 271.35, 271.35],
[271.35, 271.35, 271.35, ..., 271.35, 271.35, 271.35]],
dtype=float32)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
3. 使用()转换成array
np.array(sst)
- 1
结果为数组array:
array([[ nan, nan, nan, ..., nan, nan, nan],
[ nan, nan, nan, ..., nan, nan, nan],
[ nan, nan, nan, ..., nan, nan, nan],
...,
[271.35, 271.35, 271.35, ..., 271.35, 271.35, 271.35],
[271.35, 271.35, 271.35, ..., 271.35, 271.35, 271.35],
[271.35, 271.35, 271.35, ..., 271.35, 271.35, 271.35]],
dtype=float32)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
参考:/questions/44014479/conversion-from-xarray-dask-array-to-numpy-array-is-very-slow