【问题标题】:Storing datetime in numpy array将日期时间存储在 numpy 数组中
【发布时间】:2018-02-09 17:09:55
【问题描述】:

假设我想在一个 numpy 数组中存储超过 100 次 for 循环迭代的日期时间值,如下所示:

import numpy as np
import time 
from datetime import datetime

Startmult = np.zeros((1,100))
for i in range(100): 
    Startmult[i] = datetime.now()

每当我这样做时,我都会收到以下错误:

float() argument must be a string or a number, not 'datetime.datetime'

有没有办法克服这个错误?

感谢您的帮助!

编辑:另外,现在我想做以下事情,但似乎找不到解决方案:

 CPUtime = np.zeros((100), dtype='datetime64[s]')
 for i in range(100): 
     Start = datetime.now() 
     CPUtime[i] = datetime.now()-Start

现在出现以下错误:

Could not convert object to NumPy datetime

【问题讨论】:

标签: python python-3.x datetime numpy


【解决方案1】:

正如错误消息中所指出的,我们需要在那里使用兼容的 dtype,float 不会这样做。兼容的之一是datetime64,我们还需要指定精度。假设我们想要seconds。然后,数组初始化部分将是 -

Startmult = np.zeros((100), dtype='datetime64[s]')

列出所有可用的时间单位here

这是nano-sec100 元素案例上运行的示例运行,并使用第一个和最后一个输出元素进行验证 -

In [447]: Startmult = np.zeros((100), dtype='datetime64[ns]')
     ...: for i in range(100): 
     ...:     Startmult[i] = datetime.now()
     ...:     

In [448]: Startmult[0] # first element
Out[448]: numpy.datetime64('2017-08-31T22:39:45.722306000')

In [449]: Startmult[-1] # last element
Out[449]: numpy.datetime64('2017-08-31T22:39:45.723201000')

编辑:如果您尝试将两个时间点之间经过的秒数存储为浮动 pt 数字,您可以执行以下操作 -

CPUtime = np.zeros((100))
for i in range(100): 
    Start = datetime.now()
    time_diff = datetime.now()-Start
    CPUtime[i] = time_diff.total_seconds()

对于u-sec 精度,使用:time_diff.microseconds

【讨论】:

  • 非常感谢您的回答!我还有另一个问题,您也许可以帮助我解决(我已经编辑了我的原始帖子)。
  • @tattybojangler 请查看编辑部分。
【解决方案2】:

您需要将当前日期时间转换为整数格式(仅秒)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2023-04-10
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多