python - 优化迭代检查连续值之间的最大差异
问题描述
我有一个 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
推荐阅读
- excel - 如何更正我的 VBA 代码中的类型 13 错误不匹配
- python - 在 Kivy 中创建按钮
- python-3.x - 如何使用另一个变量“组装”一个python变量名?
- google-colaboratory - 在 torch.eig(x) 中没有为“Long”实现“eig_cpu”
- javascript - 如何使用 React 使迭代数据在表中正确呈现?
- powerbi - 有没有办法在 Power BI 中的同一可视化上绘制多个散点图?
- spring - 在 Spring 数据 jdbc 中使用值对象作为 ID - 无法插入
- python - 在 POS 标记元组中词形还原词 - python
- javascript - stanza.js 在五分钟内发送不可用状态,我该如何阻止它?
- swift - 使用 Swift 删除需要管理员权限的文件