在numpy数组中存储日期时间

4
假设我想在一个for循环的100次迭代中,将日期时间值存储在一个numpy数组中,如下所示:
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

https://dev59.com/kmsz5IYBdhLWcg3wg4Cv - FCo
2个回答

7
正如错误消息所指出的,我们需要在那里使用兼容的dtype类型,而float不合适。兼容的其中一种类型将是datetime64,并且我们需要指定精度。假设我们想要精确到,那么数组初始化部分将是:
Startmult = np.zeros((100), dtype='datetime64[s]')

所有可用的时间单位列表 在此处列出。

以下是针对nano-sec运行100个元素情况的示例,并验证第一个和最后一个输出元素-

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')

编辑:如果您尝试将两个时间点之间经过的秒数存储为浮点数,可以按照以下步骤操作 -
CPUtime = np.zeros((100))
for i in range(100): 
    Start = datetime.now()
    time_diff = datetime.now()-Start
    CPUtime[i] = time_diff.total_seconds()

若要实现微秒级别的精度,请使用:time_diff.microseconds


非常感谢您的回答!我还有另一个问题,您可能能够帮助我(我已编辑了原始帖子)。 - tattybojangler
1
@tattybojangler 请查看“编辑”部分。 - Divakar

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接