重现你的结果:
>>> a = numpy.array([20090913, 20101020, 20110125])
>>> numpy.datetime64(a.astype("S8").tolist())
array([2009-09-13 00:00:00, 2010-10-20 00:00:00, 2011-01-25 00:00:00], dtype=datetime64[us])
>>> numpy.datetime64(a.astype("S8"))
array([1970-01-01 00:00:20.090913, 1970-01-01 00:00:20.101020,
1970-01-01 00:00:20.110125], dtype=datetime64[us])
这是关键:
>>> a.astype("S8").tolist()
['20090913', '20101020', '20110125']
>>> a.astype("S8")
array(['20090913', '20101020', '20110125'],
dtype='|S8')
在第一种情况下,字符串参数被传递给numpy.datetime64 并被正确解析,正如您所描述的那样。其次,它需要从|S8 执行显式强制转换。事实证明这是正在考虑的,但目前explicitly isn't supported:
这没有进入,因为日期时间属性不存在于
将它们转换为 datetime64 后的数组,因此可能会有一些
不直观的后果。当马丁实施
四元数 dtype,我们讨论了 dtypes 可以
公开显示在数组对象上的属性,如果这是
实现了我认为python之间的转换和兼容性
datetime 和 datetime64 可以变得很自然。
The documentation 有更多您可能希望考虑的工作强制示例,包括其他 numpy 时间格式。如果你觉得显式类型强制的需要是错误的,我建议将它报告给 numpy 团队,如果可能的话,提交你自己的补丁。