import numpy
a = numpy.array([20090913, 20101020, 20110125])
你能解释为什么numpy.datetime64(a.astype("S8").tolist())
正确转换而不是numpy.datetime64(a.astype("S8"))
?为什么numpy函数不接受numpy字符串而只接受常规python字符串?我正在使用Numpy 1.6.1和Python 2.7.2 Windows 7。
答案 0 :(得分:4)
重现结果:
>>> 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团队,如果可能的话,提交自己的补丁。