我在间隔中有一些点 [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]
Run Code Online (Sandbox Code Playgroud)
如果我们想要最少的min_points=4点数,则窗口的起始范围(我手动找到的)的解决方案是:
suitable_starts = [[10.2,11.3],[15.5,17.0]]
Run Code Online (Sandbox Code Playgroud)
即大小3窗口的开始可以是 from 10.2to11.3和 from 15.5to 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]]
Run Code Online (Sandbox Code Playgroud)
笔记:
正如评论中的某人指出的那样,有时当点与 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]
Run Code Online (Sandbox Code Playgroud)
但这些可以安全地忽略。
是否有一个 numpy 函数将数组拆分为大小为 m 的相等块(不包括大小小于 m 的任何余数)。我已经查看了函数np.array_split ,但这并不能让您通过指定块的大小来拆分。
我正在寻找的一个例子如下:
X = np.arange(10)
split (X, size = 3)
-> [ [0,1,2],[3,4,5],[6,7,8], [9] ]
split (X, size = 4)
-> [ [0,1,2,3],[4,5,6,7],[8,9]]
split (X, size = 5)
-> [ [0,1,2,3,4],[5,6,7,8,9]]
Run Code Online (Sandbox Code Playgroud)