【问题标题】:What is the fastest way to convert from a unixtime to a numpy.datetime64?从 unixtime 转换为 numpy.datetime64 的最快方法是什么?
【发布时间】:2012-01-16 14:07:34
【问题描述】:

我想这里的关键是减少中间转换的数量,但我无法在新的 Numpy 2.0 开发中找到简单的方法

【问题讨论】:

    标签: python numpy unix-timestamp


    【解决方案1】:

    实际上,numpy.datetime64 对象在内部基本上是 unix 时间(有 6 个额外的有效数字来说明毫秒精度)。你只需要乘以1e6

    举个例子:

    import numpy as np
    
    # Generate a few unix time stamps near today...
    x = np.arange(1326706251, 1326706260)
    
    # Convert to datetimes...
    x *= 1e6
    x = x.view(np.datetime64)
    
    print x
    

    这会产生:

    [2012-01-16 09:30:51 2012-01-16 09:30:52 2012-01-16 09:30:53
     2012-01-16 09:30:54 2012-01-16 09:30:55 2012-01-16 09:30:56
     2012-01-16 09:30:57 2012-01-16 09:30:58 2012-01-16 09:30:59]
    

    【讨论】:

    • 乘以 1e6 似乎会溢出 np.datetime64。另一方面,使用 np.datetime64(1326706251,'s') 似乎给出了我想要的结果。您使用的是哪个版本的 numpy?
    • 我正在使用1.6。它对我来说不会溢出,np.datetime64 也不会为我接受第二个参数......
    • 好的,所以也许是我在使用 2.0 开发版。谢谢!!
    • 是的,我听说 numpy 在 2.0 中的日期时间行为发生了很多变化......我上面的回答是非常特定于实现的,显然它很快就会改变。很高兴你找到了其他有用的东西!
    • 在我看来不是一个非常干净的解决方案,Achilles1515 的解决方案更重要。另请注意我在下面的评论。
    【解决方案2】:

    从 NumPy 1.18 开始:

    import numpy as np
    
    timestamp = np.datetime64(1326706251, 's')
    print(timestamp)
    

    输出:

    2012-01-16T09:30:51
    

    【讨论】:

    • 对于时间戳数组,a,你可以做a.astype('datetime64[s]')
    猜你喜欢
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    相关资源
    最近更新 更多