相关疑难解决方法(0)

连续的,重叠的数组子集(NumPy,Python)

我有一个NumPy数组,[1,2,3,4,5,6,7,8,9,10,11,12,13,14]并希望有一个像这样的数组[[1,2,3,4], [2,3,4,5], [3,4,5,6], ..., [11,12,13,14]].

当然这可以通过循环大数组并将长度为4的数组添加到新数组中,但我很好奇是否有一些秘密的'魔术'Python方法正在做这个:)

python numpy scipy

12
推荐指数
2
解决办法
6569
查看次数

将Python序列(时间序列/数组)拆分为具有重叠的子序列

我需要提取给定窗口的时间序列/数组的所有子序列.例如:

>>> ts = pd.Series([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> window = 3
>>> subsequences(ts, window)
array([[0, 1, 2],
       [1, 2, 3],
       [2, 3, 4],
       [3, 4, 5],
       [4, 5, 6],
       [5, 6, 7],
       [5, 7, 8],
       [6, 8, 9]])
Run Code Online (Sandbox Code Playgroud)

迭代序列的朴素方法当然是昂贵的,例如:

def subsequences(ts, window):
    res = []
    for i in range(ts.size - window + 1):
        subts = ts[i:i+window]
        subts.reset_index(drop=True, inplace=True)
        subts.name = None
        res.append(subts)
    return pd.DataFrame(res)
Run Code Online (Sandbox Code Playgroud)

我找到了一种更好的方法,通过复制序列,将其移动一个不同的值,直到窗口被覆盖,然后用不同的序列分割reshape.性能大约好100倍,因为for循环迭代窗口大小,而不是序列大小:

def subsequences(ts, window):
    res = [] …
Run Code Online (Sandbox Code Playgroud)

python performance numpy time-series pandas

8
推荐指数
1
解决办法
3548
查看次数

Pandas滚动窗口返回一个数组

这是一个示例代码.

df = pd.DataFrame(np.random.randn(10, 2), columns=list('AB'))
df['C'] = df.B.rolling(window=3)
Run Code Online (Sandbox Code Playgroud)

输出:

           A         B                                       C
0 -0.108897  1.877987  Rolling [window=3,center=False,axis=0]
1 -1.276055 -0.424382  Rolling [window=3,center=False,axis=0]
2  1.578561 -1.094649  Rolling [window=3,center=False,axis=0]
3 -0.443294  1.683261  Rolling [window=3,center=False,axis=0]
4  0.674124  0.281077  Rolling [window=3,center=False,axis=0]
5  0.587773  0.697557  Rolling [window=3,center=False,axis=0]
6 -0.258038 -1.230902  Rolling [window=3,center=False,axis=0]
7 -0.443269  0.647107  Rolling [window=3,center=False,axis=0]
8  0.347187  0.753585  Rolling [window=3,center=False,axis=0]
9 -0.369179  0.975155  Rolling [window=3,center=False,axis=0]
Run Code Online (Sandbox Code Playgroud)

我希望我的'C'列是一个像[0.1231,-1.132,0.8766]这样的数组.我尝试使用滚动应用但是徒劳无功.

预期产出:

       A         B                 C
0 -0.108897  1.877987  []
1 -1.276055 -0.424382  []
2  1.578561 -1.094649  [-1.094649, …
Run Code Online (Sandbox Code Playgroud)

python numpy dataframe pandas

6
推荐指数
4
解决办法
2451
查看次数

标签 统计

numpy ×3

python ×3

pandas ×2

dataframe ×1

performance ×1

scipy ×1

time-series ×1