【发布时间】:2020-10-02 10:13:17
【问题描述】:
我在[0,20]区间有一些点
我有一个大小为window_size=3 的窗口,我可以在上述区间内移动。因此,窗口的开头 - 让我们调用 start 被限制为 [0,17]。
假设我们在下面有一些points:
points = [1.4,1.8, 11.3,11.8,12.3,13.2, 18.2,18.3,18.4,18.5]
如果我们想要至少min_points=4 点,则窗口开始范围的解决方案(我手动找到的)是:
suitable_starts = [[10.2,11.3],[15.5,17.0]]
即大小3 窗口的开始可以从10.2 到11.3 和从15.5 到17.0。 简单地说,窗口的对应结束只是开始范围的+3。
我正在寻找一种通过巧妙的numpy 或scipy 或其他功能在算法上快速解决此问题的方法。
我正在寻找的一般功能是:
get_start_windows(interval = [0,20],
window_size = 3.0,
points = [1.4,1.8,11.3,11.8,12.3,13.2,18.2,18.3,18.4,18.5],
min_points = 4
return suitable_starts # suitable_starts = [[10.2,11.3],[15.5,17.0]]
注意:
正如 cmets 中的某个人所指出的,有时在某些特殊情况下,点之间的距离正好是 window_size。然而实际上这些点是双浮点数,它们不可能完全分开 window_size,因此可以忽略它们。
这些特殊的例子包括:
points = [1.4,1.8, 11.3,11.8,12.3,13.2,14.2,15.2,16.2,17.2,18.2,18.3,18.4,18.5]
但这些可以安全地忽略。
【问题讨论】:
-
如果我在你身边,我会分享你的“手动”/“慢”方法,以便有一些东西可以比较
-
恐怕我不完全理解你的逻辑,但间隔不应该是
[10.2, 11.3](因为10.2 + 3.0 = 13.2)和[15.5, 17.0](因为15.5 + 3.0 = 18.5)!? -
@HansHirse 你是对的。现在编辑。
-
下一个问题:如何定义“间隔”?预期结果是什么:a)
points = [1.4,1.8,2.8,3.8,4.8,11.3,11.8,12.3,13.2,18.2,18.3,18.4,18.5]和 b)points = [1.4,1.8,11.3,11.8,12.3,13.2,14.2,15.2,16.2,17.2,18.2,18.3,18.4,18.5]? -
我猜是 sn-p 代码的错字,你的意思是
min_points=4