如何将数组切片为序列数组?

2024-04-25 23:58:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个功能和标签的时间序列数组

x=[1,2,3,4,5,6......100]
y=[0.5,0.8,0.9,0.5,0.9,0.8,....,0.9]

我想把它变成动态子数组,就像I=3那么

x=[1,2,3],[2,3,4],[3,4,5],...
y=[0.5,0.8,0.9],[0.8,0.9,0.5],[0.9,0.5,0.9],...

所以我知道t[1:i]将第一个元素赋给第I个元素,但是如何连续地这样做。 感谢您的帮助。你知道吗


Tags: 功能元素时间动态序列标签数组
1条回答
网友
1楼 · 发布于 2024-04-25 23:58:17

你想要的是一种从序列中计算滑动窗口的方法。你知道吗

通过@Daniel DiPaolo修改来自Rolling or sliding window iterator?的解决方案

from itertools import islice

def window(seq, n=2):
    "Returns a sliding window (of width n) over data from the iterable"
    "   s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ...                   "
    it = iter(seq)
    result = list(islice(it, n))
    if len(result) == n:
        yield result
    for elem in it:
        result = result[1:] + [elem]
        yield result

from functools import partial

def group_slice(*args, winsize):
    yield from zip(*map(partial(window, n=winsize), args))

def group_slice(*args, winsize):
     # Slightly clearer version of the above 
     partial_func = partial(window, n=winsize)
     yield from zip(*(partial_func(s) for s in args))

group_slice正在做的是

  1. 用给定的值window创建一个分部函数 窗口大小。

  2. 将此部分“修改的”window函数应用于 收集发电机。

  3. 然后从每个生成器生成每个片。

你是这样用的

x = [1,2,3,4,5,6]
y = [0.5,0.8,0.9,0.5,0.9,0.8]

for x_slice, y_slice in group_slice(x, y, winsize=3):
    print(x_slice)
    print(y_slice)

它将输出

[1, 2, 3]
[0.5, 0.8, 0.9]
[2, 3, 4]
[0.8, 0.9, 0.5]
[3, 4, 5]
[0.9, 0.5, 0.9]
[4, 5, 6]
[0.5, 0.9, 0.8]

或者如果你只需要一个小组的名单

x_slices = list(window(x, n=3))

相关问题 更多 >