怎么显示出数值(实际值)?利用xr.open_mfdataset读数据后,输出结果显示数据是类型

时间:2024-11-21 08:00:48

问题说明

笔者在利用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