我有一个表示测量曲线的数组。我在寻找第一个索引i
,随后的N
元素满足某些条件,例如位于特定边界内。在伪代码中,我在寻找最小的i
,这样
lower_bound < measurement[i:i+N] < higher_bound
满足范围内所有元素的要求。在
当然,我可以做以下事情:
^{pr2}$这是非常低效的,因为我总是比较每个i
的N
值。
什么是最Python式的方法来实现这一点?Numpy有一些内置的功能来找到这个吗?在
编辑: 根据请求,我提供了一些示例输入数据
a = [1,2,3,4,5,5,6,7,8,5,4,5]
lower_bound = 3.5
upper_bound = 5.5
N = 3
应返回3
,因为从a[3]
开始,元素至少在3个值的范围内。在
一个NumPythonic矢量化解决方案是在作为二维数组堆叠的输入数组
measurement
的整个长度上创建滑动窗口,然后用这些索引索引到数组中,以形成measurement
的2D数组版本。接下来,在绑定检查后使用np.all(..axis=1)
一次查找绑定成功。最后选择第一个成功指数作为输出。实施将沿着以下路线进行-样本运行-
^{pr2}$如果M是a的长度,这里有一个O(M)解。在
这对你来说并不是特别有用的:
What is the best way to get the first item from an iterable matching a condition?
相关问题 更多 >
编程相关推荐