我需要检查数组中是否realtime
有不递增的时间样本(时间倒退)
realtime
Out[2]:
array([datetime.datetime(2017, 11, 3, 20, 25, 10, 724000),
datetime.datetime(2017, 11, 3, 20, 25, 10, 744000),
datetime.datetime(2017, 11, 3, 20, 25, 10, 764000), ...,
datetime.datetime(2017, 11, 4, 2, 13, 44, 704000),
datetime.datetime(2017, 11, 4, 2, 13, 44, 724000),
datetime.datetime(2017, 11, 4, 2, 13, 44, 744000)], dtype=object)
实时是1045702L!
我尝试做
d = pd.DataFrame(np.zeros((len(realtime), 1)))
for i in range(len(realtime)):
if any(realtime[i] <= x for x in realtime[:i]): # smaller/equal than any prior
d.iloc[i] = True
但是这需要永远的时间...有没有一种更快的方法来检查数组中的元素是否是增量元素,如果没有标记它们的话?
您可以使用timedelta来comaprearray
创建:numpy.diff
0
b = np.diff(realtime) > datetime.timedelta(0)
print (b)
[ True True True True True]
在熊猫中,您可以转换为pd.Series
对象并使用diff
:
b = pd.Series(realtime).diff()
#replace first NaN value to 1
b.iat[0] = 1
print (b > pd.Timedelta(0))
0 True
1 True
2 True
3 True
4 True
5 True
dtype: bool
realtime
被自动转换为np.datetime64
,由此diff
产生Timedelta
对象。
时间:
realtime = np.array([datetime.datetime(2017, 11, 3, 20, 25, 10, 724000),
datetime.datetime(2017, 11, 3, 20, 25, 10, 744000),
datetime.datetime(2017, 11, 3, 20, 25, 10, 764000),
datetime.datetime(2017, 11, 4, 2, 13, 44, 704000),
datetime.datetime(2017, 11, 4, 2, 13, 44, 724000),
datetime.datetime(2017, 11, 4, 2, 13, 44, 744000)], dtype=object)
realtime = np.random.choice(realtime, size=1045702)
In [256]: %timeit[x.total_seconds() > 0 for x in np.diff(realtime)]
1 loop, best of 3: 382 ms per loop
In [257]: %timeit np.diff(realtime) > datetime.timedelta(0)
10 loops, best of 3: 88.2 ms per loop
In [258]: %timeit (pd.Series(realtime).diff() > pd.Timedelta(0))
10 loops, best of 3: 147 ms per loop
In [259]: %%timeit
...: b = pd.Series(realtime).diff()
...: b.iat[0] = 1
...:
...: b > pd.Timedelta(0)
...:
10 loops, best of 3: 149 ms per loop
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句