【发布时间】:2016-02-07 14:36:37
【问题描述】:
我有时间使用 dtype numpy.longdouble,当我尝试将这些值与 timedelta 函数一起使用时,我遇到了错误。但是当我将其转换为numpy.float64 时,一切都很好。有人可以解释这种行为吗?
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
【问题讨论】:
-
你可能有一些解释here
标签: python numpy types timedelta python-datetime