我在MATLAB中有一个带有(72500,1)维度的时间戳矩阵。我在MATLAB中写了这样一个声明:
returnMatrix = datestr(M(:,1)/86400 + datenum(1970,1,1)- 4/24);
我成功地将输出日期矩阵作为返回矩阵返回。
returnMatrix = ['29/06/2015',...,'06/07/2015']
为了获得相同的输出,我在Python中编写了这样的语句:
returnMatrix = (M[:, 0] / 86400 + date.toordinal(date(1970, 1, 1)) + 366 - (4/24))
returnMatrix = np.apply_along_axis((lambda x:[date.fromtimestamp(x[0]).strftime("%d/%m/%y")]),1,returnMatrix)
但作为输出,我得到了这个结果:
returnMatrix = ['09/01/1970',...,'09/01/1970']
我应该如何编写语句以使输出成为MATLAB中的输出?
答案 0 :(得分:1)
我从这个问题中理解的是,您有几秒钟的数据要添加到基准日期(1970年1月1日)并获得新日期。来自'datetime'模块的Python'timedelta'方法可以很方便地解决这个问题。
在这里,我提出了解决问题的方法
import datetime base_date = datetime.datetime(1970,1,1,0,0,0) return_matrix = [] for time in M: return_matrix.append(base_date + datetime.timedelta(seconds=time))
返回矩阵将包含所有日期。无需额外计算。
我假设数据保存在列表M中。我不明白你使用python列表的方式。您访问列表的方式,即M [:0]实际上将列表从第0个元素拆分为除第0个零之外的第0个元素。如果它是一维数据,那么你可以直接使用M我使用的方式。我认为你在MATLAB背景下感到困惑。
答案 1 :(得分:0)
鉴于M
是包含秒数的numpy
数组,如果您可以使用ISO8601格式的日期字符串,则可以执行此操作
dates = (M*numpy.timedelta64(1, 's') +
numpy.datetime64('1970-01-01T00:00') -
numpy.timedelta64(4, 'h').astype('timedelta64[s]')).astype('datetime64[D]')
(那.astype
可以压制关于隐式转换的警告。)