【问题标题】:How to do pandas rolling apply in numpy?python - 如何在numpy中应用熊猫滚动?
【发布时间】:2019-05-22 09:41:12
【问题描述】:

我想将pandas.rolling(window).apply(func) 范式应用于 numpy 数组。在搜索came across this function for numpy 时。这就是我对它所做的。

def rolling_apply(fun, a, w):
    r = np.empty(a.shape)
    r.fill(np.nan)
    for i in range(w - 1, a.shape[0]):
        r[i] = fun(a[(i-w+1):i+1])
    return r

def test(x):
    return x.sum()

arr=np.random.rand(20)
e=rolling_apply(test,arr,10)

运行时出现此错误

ValueError: 使用序列设置数组元素。

你能告诉我为什么会发生这个错误

编辑:

这项工作我在上面的代码中犯了一个初始错误。这是有效的

【问题讨论】:

  • 为什么你不能将你的函数应用到整个数组,然后根据你的要求进行滚动切片?

标签: python pandas numpy


【解决方案1】:

数组形状和索引有点混乱。快速修复:

def rolling_apply(fun, a, w):
r = np.empty((a.shape[0]-w+1, w))
r.fill(np.nan)
for i in range(w - 1, a.shape[0]):
    r[i-w+1] = fun(a[(i-w+1):i+1])
return r

def test(x):
    return x*2

arr=np.random.rand(20)
e=rolling_apply(test,arr,10)

【讨论】:

  • 您的原始代码(我的意思是您编辑后的代码,比我的回答晚)在结果数组的开头给出nans。你确定你要那样吗?如果不是,请将r 数组声明更改为r = np.empty(a.shape[0]-w+1),并将rs 行分配更改为r[i-w+1] = fun(a[(i-w+1):i+1])
  • 是的,这就是我正在寻找的它应该翻转 numpy 数组并计算。如果您能想出不同的方法来做到这一点,那么我可以接受您的回答。
猜你喜欢
  • 2018-06-26
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 2019-10-06
  • 2015-04-22
  • 2021-03-19
  • 2018-07-30
  • 2021-08-17
相关资源
最近更新 更多