优化迭代检查,以获得连续值之间的最大差异



我有一个int_16的二进制文件。它们被分类到一个 nx2 数组中,其中每列都包含正弦波的样本。

我正在检查每个连续值,以查看两者之间的大小差异是否大于某个值。下面是一些正在执行任务的代码。有什么更好的方法呢?我正在使用Python 2.7

import numpy as np
DIFF_MAX = 100
errcnt = 0
f = open("samp.bin","rb")
a = np.fromfile(f, dtype=np.int16)
n = np.reshape(a, (-1,2))
for i in range(0,len(a)/2 - 2):
    if(abs(abs(n[i,0])-abs(n[i+1,0])) > DIFF_MAX):
            errcnt = errcnt + 1
            print "ERROR!!!"
    if(abs(abs(n[i,1])-abs(n[i+1,1])) > DIFF_MAX):
            errcnt = errcnt + 1
            print "ERROR!!!"
print str(errcnt) + " errors found out of " + str(len(a)/2)

我想这样做本质上会很慢,我只是好奇是否有更好的方法。谢谢。

运行

time python test.py 
0 errors found out of 4329472
real    0m21.025s
user    0m20.950s
sys 0m0.075s
您可以通过将

数组相对于彼此移动一个位置并减去它们来做到这一点。

abs(abs(n[1::,:]) - abs(n[:-1,:])) > DIFF_MAX

生成的布尔数组将指示带有TRUE的位置,只要沿第一维的两个连续值之间的差异大于DIFF_MAX,并在其他地方FALSE

最新更新