我有一个清单清单。例如:
a = [[38, 2, 33, 8, 17, 8, 39, 36, 34, 17, 26, 22, 10, 2, 37, 17, 33, 2, 23, 40, 38, 0, 40, 14, 3, 30],
[38, 20, 31, 33, 0, 30, 33, 2, 8, 34, 30, 36, 10, 2, 38, 35, 8, 40, 0, 25, 2, 30, 2, 25]]
此列表包含大约200个子列表(我提供了2个)。我正在寻找一种输出包含滑动窗口的数组的方法,该滑动窗口具有任意数量的前后值。例如,使用两个前面的值和三个下面的值,我试图得到:
[[_, _, 38, 2, 33, 8],
[_, 38, 2, 33, 8, 17],
[38, 2, 33, 8, 17, 9],
...,
[14, 3, 30, _, _, _,],
[_, _, 38, 20, 31, 33],
...]
我将需要重复多次此操作(对于不同的子列表),因此速度很重要。我的印象是,将数据转换为Numpy数组以使用答案here可能太慢(由于每个列表的长度不同,我猜我需要实例化多个np.arrays)。有没有很好的方法可以做到这一点?谢谢!
答案 0 :(得分:0)
我相当确定这是最快的方法。
def f(b):
ret = []
for sublist in b:
ret.append(["_","_"] + sublist[0:4])
ret.append(["_"] + sublist[0:5])
for i in range(len(sublist)-4):
ret.append(sublist[i:i+5])
ret.append(sublist[-4:] + ["_"])
ret.append(sublist[-3:] + ["_", "_"])
ret.append(sublist[-2:] + ["_", "_", "_"])
return ret
很显然,您必须迭代每个子列表才能真正达到所需的结果,并且对于每个子列表,您必须对其进行n次迭代才能生成n个列表,因此,我相当确定这一点(o(n ^ 2))是最快的获取方式。