我有一个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
答案 0 :(得分:1)
您可以通过以下方式做到这一点:将数组彼此相对移动一个位置并减去它们。
abs(abs(n[1::,:]) - abs(n[:-1,:])) > DIFF_MAX
结果布尔数组将用TRUE
表示位置,而沿第一个维度的两个连续值之间的差大于其他地方的DIFF_MAX
和FALSE
。