我正在使用Python 3.6.2。
我从this question学到了如何在标准的datetime
类型和np.datetime64
类型之间进行转换,如下所示。
dt = datetime.now()
print(dt)
print(np.datetime64(dt))
输出:
2017-12-19 17:20:12.743969
2017-12-19T17:20:12.743969
但我无法将可迭代的标准datetime
对象转换为Numpy数组。以下代码......
np.fromiter([dt], dtype=np.datetime64)
...给出以下错误。
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-14-46e4618bda89> in <module>()
----> 1 np.fromiter([dt], dtype=np.datetime64)
TypeError: Cannot cast datetime.datetime object from metadata [us] to according to the rule 'same_kind'
但是,使用np.asarray()
的作品。
np.asarray([dt])
输出:
array([datetime.datetime(2017, 12, 19, 17, 20, 12, 743969)], dtype=object)
这可能是np.fromiter()
或np.datetime64
的错误?
这可能只是设置日期时间单位:
In [368]: dt = datetime.now()
In [369]: dt
Out[369]: datetime.datetime(2017, 12, 19, 12, 48, 45, 143287)
np.array
的默认操作(不需要带列表的fromiter
)是创建一个对象dtype数组:
In [370]: np.array([dt,dt])
Out[370]:
array([datetime.datetime(2017, 12, 19, 12, 48, 45, 143287),
datetime.datetime(2017, 12, 19, 12, 48, 45, 143287)], dtype=object)
看起来简单的'datetime64'会产生天数:
In [371]: np.array([dt,dt], dtype='datetime64')
Out[371]: array(['2017-12-19', '2017-12-19'], dtype='datetime64[D]')
并指定单位:
In [373]: np.array([dt,dt], dtype='datetime64[m]')
Out[373]: array(['2017-12-19T12:48', '2017-12-19T12:48'], dtype='datetime64[m]')
这也适用于fromiter
。
In [374]: np.fromiter([dt,dt], dtype='datetime64[m]')
Out[374]: array(['2017-12-19T12:48', '2017-12-19T12:48'], dtype='datetime64[m]')
In [384]: x= np.fromiter([dt,dt], dtype='M8[us]')
In [385]: x
Out[385]: array(['2017-12-19T12:48:45.143287', '2017-12-19T12:48:45.143287'], dtype='datetime64[us]')
我已经学会了使用datetime64的字符串名称,这允许我指定单位,而不是最通用的np.datetime64
。