相关疑难解决方法(0)

numpy中的滑动窗口

我有一个numpy形状(6,2)

[[00,01],
 [10,11],
 [20,21],
 [30,31],
 [40,41],
 [50,51]]
Run Code Online (Sandbox Code Playgroud)

我需要一个步长为1的滑动窗口,窗口大小为3喜欢这个:

[[00,01,10,11,20,21],
 [10,11,20,21,30,31],
 [20,21,30,31,40,41],
 [30,31,40,41,50,51]]
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个numpy解决方案.如果您的解决方案可以参数化原始数组的形状以及窗口大小和步长,那就太好了.

我发现这个相关的答案使用步幅有效的移动平均滤波器,但我没有看到如何指定那里的步长以及如何将窗口从3d折叠到连续的2d数组.这个滚动或滑动窗口迭代器在Python中,但是在Python中,我不确定它的效率如何.此外,它支持元素,但如果每个元素具有多个特征,则最终不会将它们连接在一起.

python numpy time-series sliding-window

31
推荐指数
5
解决办法
4万
查看次数

如何将不返回数值的函数应用于熊猫滚动窗口?

我有一个日期时间系列的 dtype:float64。我正在尝试将自定义函数应用于该系列的滚动窗口。我希望这个函数返回字符串。但是,这会生成 TypeError。为什么这会产生错误,有没有办法直接通过应用一个函数来使这个工作?

下面是一个例子:

import numpy as np
import pandas as pd

np.random.seed(1)
number_series = pd.Series(np.random.randint(low=1,high=100,size=100),index=[pd.date_range(start='2000-01-01',freq='W',periods=100)])
number_series = number_series.apply(lambda x: float(x))

def func(s):
    
    if s[-1] > s[-2] > s[-3]:
        return 'High'
    elif s[-1] > s[-2]:
        return 'Medium'
    else:
        return 'Low'

new_series = number_series.rolling(5).apply(func)
Run Code Online (Sandbox Code Playgroud)

结果是以下错误:

TypeError: must be real number, not str
Run Code Online (Sandbox Code Playgroud)

我目前采用的解决方法是修改 func 以将整数输出到一个系列,然后将另一个函数应用于该系列以生成新系列。按照下面的例子:

def func_float(s):
    
    if s[-1] > s[-2] > s[-3]:
        return 1
    elif s[-1] > s[-2]:
        return 2
    else:
        return 3
    
float_series = number_series.rolling(5).apply(func_float)

def func_text(s):

    if s …
Run Code Online (Sandbox Code Playgroud)

python series apply pandas rolling-computation

8
推荐指数
2
解决办法
166
查看次数

熊猫:你可以访问滚动窗口项吗?

你可以访问pandas滚动窗口对象.

rs = pd.Series(range(10))
rs.rolling(window = 3)

#print's 
Rolling [window=3,center=False,axis=0]
Run Code Online (Sandbox Code Playgroud)

我可以成群结队吗?:

[0,1,2]
[1,2,3]
[2,3,4]
Run Code Online (Sandbox Code Playgroud)

python pandas

7
推荐指数
2
解决办法
975
查看次数

如何正确使用 numpy as_strided (来自 np.stride_tricks)?

我正在尝试使用 重塑 numpy 数组numpy.strided_tricks。这是我正在遵循的指南:https ://stackoverflow.com/a/2487551/4909087

我的用例非常相似,不同之处在于我需要 3 的步幅。

给定这个数组:

a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
Run Code Online (Sandbox Code Playgroud)

我想得到:

array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 5],
       [4, 5, 6],
       [5, 6, 7],
       [6, 7, 8],
       [7, 8, 9]])
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

import numpy as np

as_strided = np.lib.stride_tricks.as_strided
a = np.arange(1, 10)

as_strided(a, (len(a) - 2, 3), (3, 3))

array([[                 1,      2199023255552,             131072],
       [     2199023255552,             131072, 216172782113783808],
       [            131072, 216172782113783808,        12884901888],
       [216172782113783808,        12884901888, …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

6
推荐指数
2
解决办法
4069
查看次数