使用python在移动间隔上查找max(和min)

use*_*234 4 python arrays max min python-3.x

我有一个类似的阵列

[5.5, 6.0, 6.0, 6.5, 6.0, 5.5, 5.5, 5.0, 4.5]. 
Run Code Online (Sandbox Code Playgroud)

该数组的所有数字相差0.5,两个连续数字的最大差值也为0.5(它们可以相同;如示例中所示).并且有一个移动间隔或框,其中包含例如3个连续数字,如下所示:

[(5.5, 6.0, 6.0), 6.5, 6.0, 5.5, 5.5, 5.0, 4.5]  # min: 5.5, max: 6.0
Run Code Online (Sandbox Code Playgroud)

并且盒子一个接一个地向右移动:

[5.5, (6.0, 6.0, 6.5), 6.0, 5.5, 5.5, 5.0, 4.5]  # min: 6.0, max: 6.5

[5.5, 6.0, (6.0, 6.5, 6.0), 5.5, 5.5, 5.0, 4.5]  # min: 6.0, max: 6.5
Run Code Online (Sandbox Code Playgroud)

问题是,如何在每个时间框移动时找到框内数字的最小值和最大值?

当盒子和数组的大小像这个例子那样小时,我可以处理它,但我需要将它应用于数组大小100000和盒子大小10000.使用我的方法(我每次使用for循环计算每个max和min盒子通过),花了太多时间(我有100多个阵列要做,需要反复运行).有一些时间限制,所以我需要在0.5秒内像一次计算一样运行它.

wim*_*wim 5

看看熊猫滚动的窗户:

>>> import pandas as pd
>>> L = [5.5, 6.0, 6.0, 6.5, 6.0, 5.5, 5.5, 5.0, 4.5]
>>> a = pd.DataFrame(L)
>>> pd.rolling_max(a, 3)
     0
0  NaN
1  NaN
2  6.0
3  6.5
4  6.5
5  6.5
6  6.0
7  5.5
8  5.5
>>> pd.rolling_min(a, 3)
     0
0  NaN
1  NaN
2  5.5
3  6.0
4  6.0
5  5.5
6  5.5
7  5.0
8  4.5
Run Code Online (Sandbox Code Playgroud)


小智 0

l = [5.5, 6.0, 6.0, 6.5, 6.0, 5.5, 5.5, 5.0, 4.5]

windoSize = 3

for i in range(0,len(l)-windowSize+1):

    print max(l[i:i+windoSize])
Run Code Online (Sandbox Code Playgroud)

输出:

6.0
6.5
6.5
6.5
6.0
5.5
5.5
Run Code Online (Sandbox Code Playgroud)

  • 这可能就是 OP 正在做的事情,但他们说对于 `len(l) == 100000` 和 `windoSize = 10000` 来说太慢了 (3认同)