Невозможно с достаточной точностью преобразовать формат даты и даты в Matlab в Python. - PullRequest
1 голос
/ 18 октября 2019

У меня есть файл .mat со значениями datenum (т.е. 735724.3229166666, 735725.6756944444 и т. Д.).

Моя цель - преобразовать его в формат datetime без потери точности, другими словами, он должен работать с такой же точностью, как иэто сработало бы с Matlab.

Мне прекрасно известны эти ответы: Преобразование формата datenum в Matlab в Python

Но ни один из них не работает так точно, потому что Python округляет все после десятичной дроби почти в каждомчисловая операция.

Например, те функции, которые я написал, основаны на ответах по ссылке выше:

def datenum_to_datetime1(datenum):

    days = datenum % 1
    return datetime.fromordinal(int(datenum)) \
           + timedelta(days=days) \
           - timedelta(days=366)

def datenum_to_datetime2(datenum):

    days = np.float_(datenum) % 1
    return datetime.fromordinal(int(datenum)) \
           + timedelta(days=days) \
           - timedelta(days=366)

def datenum_to_datetime3(datenum):

    return pd.to_datetime(datenum-719529, unit='D')

def datenum_to_datetime4(datenum):

    origin = np.datetime64('0000-01-01', 'D') - np.timedelta64(1, 'D')
    date = datenum * np.timedelta64(1, 'D') + origin
    return date

Если я попробую их на 735724.3229166666, я получу:

  • 2014-05-05 07: 44: 59.999997
  • 2014-05-05 07: 44: 59.999997
  • 2014-05-05 07: 45: 00.000028800
  • 2014-05-05

Третий вариант является наиболее точным, но с Matlab он все же отличается. Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 19 октября 2019

Полагаю, ваша дата ввода была 2014-05-05 07:45:00. Давайте посмотрим на точность, с которой MATLAB хранит дату. Он использует 64-битную с плавающей точкой. При имеющихся значениях точность в секундах составляет eps(735724)*24*60*60 или 1.0058e-05. Пока вы видите ошибки в пределах (половины) этого числа, они уже присутствуют во ваших входных данных и не вызваны вашей конверсией. Если вам нужно более высокое разрешение, вам нужны входные данные с более высокой точностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...