python - 如何在 python 中搜索具有公差的模式

标签 python extract sequence sample missing-data

这是我的问题。我正在尝试从一个实时系统收集输出,该实时系统以 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/

相关文章:

python - 不断收到TypeError : 'list' object is not callable

windows - 从多个 7-zip 文件中提取特定的文件扩展名

r - 在 R 中创建嵌套序列

python , Windows : parsing command lines with shlex

python - 代码不适用于黑客等级!适用于 Repl 和 Jupyter

executable - 自解压可执行文件是如何制作的?

c# - 如何使用 sevenzipsharp 提取文件

mysql检查数字序列中的间隙

java - 如何从 Java 中的字符串中提取 7 个数字的序列?

python - 从头到尾循环