2017-08-31 53 views
1

比方说,我想datetime值超过了循环100次迭代的在numpy的阵列存储,像这样:在numpy的阵列中存储的datetime

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 
+0

https://stackoverflow.com/questions/7852855/how-to-convert-a-python-datetime-object-to-seconds – FCo

回答

3

尖的在错误信息中,我们需要使用兼容的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

+0

非常感谢您的回答!我还有另一个问题,你可以帮助我(我编辑了我的原始帖子)。 – tattybojangler

+1

@tattybojangler请检查编辑部分。 – Divakar

+0

再次感谢您的回答!有效! – tattybojangler

1

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