【问题标题】:Numpy odd behaviour conversion to datetime64 dtypeNumpy 奇怪的行为转换为 datetime64 dtype
【发布时间】:2012-03-14 20:31:57
【问题描述】:
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 一起使用。

【问题讨论】:

    标签: python datetime numpy


    【解决方案1】:

    重现你的结果:

    >>> 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 团队,如果可能的话,提交你自己的补丁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-25
      • 2019-05-22
      • 2022-08-15
      • 2021-09-27
      • 2020-11-25
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多