Как получить период времени с Numpy? - PullRequest
3 голосов
/ 02 апреля 2020

Если даны данные типа np.datetime64, как получить период времени вокруг времени?

Например, если для функции задано np.datetime64('2020-04-01T21:32'), я хочу, чтобы функция возвращала np.datetime64('2020-04-01T21:30') и np.datetime64('2020-04-01T21:39') - 10 минут за указанное время.

Есть ли способ сделать это с numpy?

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Numpy не имеет встроенного периода времени, как Pandas.

Если вам нужны только две отметки времени, должна работать следующая функция.

def ten_minutes_around(t):
    t = ((t.astype('<M8[m]') # Truncate time to integer minute representation
         .astype('int')      # Convert to integer representation
         // 10) * 10         # Remove any sub 10 minute minutes
        ).astype('<M8[m]')   # convert back to minute timestamp
    return np.array([t, t + np.timedelta64(10, 'm')]).T

Для пример:

for t in [np.datetime64('2020-04-01T21:32'), np.datetime64('2052-02-03T13:56:03.172')]:
    s, e = ten_minutes_around(t)
    print(s, t, e)

дает:

2020-04-01T21:30 2020-04-01T21:32 2020-04-01T21:40
2652-02-03T13:50 2652-02-03T13:56:03.172 2652-02-03T14:00

и

ten_minutes_around(np.array([
    np.datetime64('2020-04-01T21:32'),
    np.datetime64('2652-02-03T13:56:03.172'),
    np.datetime64('1970-04-01'),
]))

дает

array([['2020-04-01T21:30', '2020-04-01T21:40'],
       ['2652-02-03T13:50', '2652-02-03T14:00'],
       ['1970-04-01T00:00', '1970-04-01T00:10']], dtype='datetime64[m]')
1 голос
/ 02 апреля 2020

Для этого мы можем получить минуту из заданного времени и вычесть ее из заданного времени, чтобы получить начало периода, и добавить 9 минут, чтобы получить время окончания периода.

import numpy as np
time = '2020-04-01T21:32'
dt = np.datetime64(time) 
base = (dt.tolist().time().minute) % 10 // base would be 3 in this case

start = dt - np.timedelta64(base,'m')
end = start + np.timedelta64(9,'m')
print(start,end,sep='\n')

Надеюсь, это поможет.

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