从Matlab时间戳日期到Python时间戳D的转换

2024-05-02 00:34:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在MATLAB中有一个(72500,1)维的时间戳矩阵。我在MATLAB中写过这样一句话:

returnMatrix = datestr(M(:,1)/86400 + datenum(1970,1,1)- 4/24);

我成功地得到了一个返回矩阵的日期。在

^{pr2}$

为了得到相同的输出,我用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中的输出?在


Tags: lambdadatenp时间矩阵语句applymatlab
2条回答

假设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是为了消除关于隐式转换的警告)。在

我对这个问题的理解是,你有以秒为单位的数据,你想把它加到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))


返回矩阵将包含所有日期。无需额外计算。在

我假设数据保存在list M中,我不明白您使用python list的方式。您访问列表的方式,即M[:0],实际上会将列表从第零个元素拆分到第零个元素(不包括第零个元素)。如果它是一维数据,那么你可以直接用M来表示。我想你对MATLAB的背景感到困惑。在

相关问题 更多 >