检查数组的元素是否单调

嘉宝秀

我需要检查数组中是否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.diff0

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章