2013-02-17 2 views
33

Как получить разницу во времени в секундах от переменной numpy.timedelta64?Разница во времени в секундах от numpy.timedelta64

time1 = '2012-10-05 04:45:18' 
time2 = '2012-10-05 04:44:13' 
dt = np.datetime64(time1) - np.datetime64(time2) 
print dt 

0:01:05 

Я хотел бы преобразовать dt на номер (междунар или поплавок), представляющих разницу во времени в секундах.

ответ

24

Вы можете получить доступ к нему через «завернутый» дату и время пункт:

>>> dt.item().total_seconds() 
65.0 

Объяснения: здесь dt является array scalar в numpy, что массив нулевого ранга или 0-мерный массив. Итак, вы найдете dt здесь также есть все методы, которыми обладает ndarray, и вы можете сделать, например, dt.astype('float'). Но он обертывает объект python, в данном случае объект datetime.timedelta.

Чтобы получить исходный скаляр, вы можете использовать dt.item(). Для индекса скалярного массива можно использовать несколько странный синтаксис GetItem с помощью пустого кортежа:

>>> dt[()] 
array(datetime.timedelta(0, 65), dtype='timedelta64[s]') 

Это должно работать во всех версиях NumPy, но если вы используете Numpy v1.7 + может быть лучше используйте новый API datetime numpy напрямую, как описано в ответе от J.F. Sebastien.

+0

Спасибо, что работал. Не могли бы вы объяснить, почему dt.seconds не работает? – sashkello

+4

Это 'datetime.timedelta', у которого есть атрибут, названный так, а не' numpy.timedelta64'. Я не знаю, почему numpy реализовала это так, хотя, может быть, кто-то еще может ответить. – wim

54

Чтобы получить количество секунд от numpy.timedelta64() объекта с помощью numpy 1.7 experimental datetime API:

seconds = dt/np.timedelta64(1, 's') 
+0

Возможно, мы используем разные версии? У меня есть 'TypeError: функция принимает не более 1 аргумента (2 данных)' при попытке 'np.timedelta64 (1, 's')' – wim

+4

@wim: yes. [1.6 и 1.7 API отличаются] (http://docs.scipy.org/doc/numpy-dev/reference/arrays.datetime.html#datetime-and-timedelta-arithmetic). – jfs

+6

Этот ответ также работает с массивами. – Yariv

Смежные вопросы