这是我的问题。我正在尝试从一个实时系统收集输出,该实时系统以 1 的步长将其输出从 55 递减到 0。我正在记录这些数据。我已经捕获了它返回的所有数据 55,54,53,....3,2,1,。但由于系统滞后,一些样本会重复,一些样本会丢失 例如,我得到
[55, 53, 52, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 39, 38, 38, 36, 36, 34, 33, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 20, 18, 17, 15, 14, 13, 13, 12, 11, 10, 9, 8, 7, 7, 5, 4, 3, 2, 1]
所以,我有一个模式(55 比 0),但有些样本丢失了,有些样本重复了。 有什么方法可以编写脚本并提取它们。
我的目标是验证 55 到 0 是否以 1 为步长发生(但这应该考虑到由于采样而导致的任何单个遗漏和重复)这是代码:
for x in range(len(b)-1):
e += b[x] - b[x+1]
print x,b[x]-b[x+1], b[x], b[x+1]
print 'reached %d count in %d decrements' % (e, len(b)-1)
最佳答案
如果我理解得很好,你可能想使用 numpy diff 函数:
In [1]: import numpy as np
In [2]: A = [55, 53, 52, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 39, 38, 38, 36, 36, 34, 33, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 20, 18, 17, 15, 14, 13, 13, 12, 11, 10, 9, 8, 7, 7, 5, 4, 3, 2, 1]
In [3]: np.diff(A)
Out[3]:
array([-2, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, 0,
-2, 0, -2, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 0, -2, -1, -2, -1, -1, 0, -1, -1, -1, -1, -1, -1, 0, -2, -1,
-1, -1, -1])
其中 -1 是预期步骤 1,-2 是缺失步骤,0 是重复。 如果您想知道问题出在哪里:
In [4]: np.where(np.diff(A) != -1)[0] # [0] because it's 1D array
Out[4]: array([ 0, 2, 14, 16, 17, 18, 19, 21, 35, 36, 38, 41, 48, 49])
如果不清楚,请告诉我。
关于python - 如何在 python 中搜索具有公差的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21986432/