我正在使用Xarray数据集包含要输入到TensorFlow DNN中的数据,当我调用train()
函数时,我最终遇到此错误:
TypeError: Cannot convert value dtype('<M8[ns]') to a TensorFlow DType.
我的假设是,这是因为数据集的时间维度/坐标变量的dtype为datetime64[ns]
,它映射到<M8[ns]
dtype:
In [1]: np.dtype('datetime64[ns]') == np.dtype('<M8[ns]')
Out[1]: True
我想修改数据集,以使time
维度/坐标变量具有整数类型,而TensorFlow可能更合适。
过去,我一直将整数类型用于时间变量以及诸如“自2000-01-01 00:00:00起的天数”之类的单位。在这种情况下,如果使用整数dtype,则由于时间步长以30分钟为增量,因此单位必须以分钟或秒为单位。
有关我当前时间变量的一些信息:
In [2]: ds['time'].coords['time']
Out[2]: <xarray.DataArray 'time' (time: 720)>
array(['2000-12-27T00:00:00.000000000', '2000-12-27T00:30:00.000000000',
'2000-12-27T00:59:59.000000000', ..., '2001-01-10T22:30:00.000000000',
'2001-01-10T23:00:00.000000000', '2001-01-10T23:29:59.000000000'],
dtype='datetime64[ns]')
Coordinates:
* time (time) datetime64[ns] 2000-12-27 2000-12-27T00:30:00 ...
Attributes:
long_name: time
bounds: time_bnds
In [3]: ds['time'].encoding
Out[3]: {'calendar': 'noleap',
'dtype': dtype('float64'),
'original_shape': (720,),
'source': '/content/fv091x180L26_dry_HS.cam.h0.2000-12-27-00000.nc',
'units': 'days since 2000-12-27 00:00:00'}
是否存在通常用于这种转换的函数,或者我只是使用timedelta等来滚动自己的函数?从NetCDF读取时,我是否可以以某种方式请求xarray将时间变量转换为更普通的内容? xarray.open_dataset()
和decode_times=False
?
提前感谢您的任何建议/见解。