У меня есть времена с dtype numpy.longdouble
и когда я пытаюсь использовать эти значения с помощью функции timedelta
У меня есть ошибки. Но когда я конвертирую его в numpy.float64
, все в порядке. Может ли кто-нибудь объяснить это поведение?ошибка timedelta с numpy.longdouble dtype
import numpy as np
from datetime import timedelta
t1 = np.array([1000], dtype=np.longdouble)
t2 = np.array([1000], dtype=np.float64)
In [166]: timedelta(seconds=t1[0])
TypeError: unsupported type for timedelta seconds component: numpy.float64
In [167]: timedelta(seconds=t2[0])
Out[167]: datetime.timedelta(0, 1000)
In [168]: timedelta(seconds=t1[0].astype(np.float64))
Out[168]: datetime.timedelta(0, 1000)
Когда я пытаюсь увидеть dtypes переменных они выглядят похоже, но не то же самое:
In [172]: t1[0].dtype
Out[172]: dtype('float64')
In [173]: t2[0].dtype
Out[173]: dtype('float64')
In [174]: np.longdouble == np.float64
Out[174]: False
In [175]: t1[0].dtype == t2[0].dtype
Out[175]: True
Редактировать
И это странно, что он не работает для np.int32 и np.int64 либо:
t3 = np.array([1000], dtype=np.int32)
t4 = np.array([1000], dtype=np.int64)
In [29]: timedelta(t3[0])
TypeError: unsupported type for timedelta days component: numpy.int32
In [69]: timedelta(t4[0])
TypeError: unsupported type for timedelta days component: numpy.int64
Вы можете иметь некоторые экспликации [здесь] (http://stackoverflow.com/questions/132988/is-there- a-difference-between-and-is-in-python) – MaTh