【问题标题】:ValueError: cannot copy sequence with size 0 to array axis with dimension 56ValueError:无法将大小为 0 的序列复制到维度为 56 的数组轴
【发布时间】:2018-12-06 23:04:13
【问题描述】:

我得到了以下 56 列,其中填充了随机数:

我想要的是添加一个额外的列,该列具有一定滞后的第 1-56 列的自相关。因此,如果滞后为 1,则结果为 0.42,滞后为 2 时为 0.06,依此类推。

这是我使用的代码:

def autocorr(x, t):
return np.corrcoef(np.array([x[0:len(x)-t], x[t:len(x)]]))

我认为,x 是数据帧,t 是滞后时间。

但是,当我尝试添加自相关且滞后 = 1 的列时,我得到:

df["output"] = autocorr(df,1)

错误:ValueError:无法将大小为 0 的序列复制到数组轴 尺寸 56

我做错了什么,或者有没有更简单的方法来计算具有定义滞后的自相关?

感谢帮助

史蒂文

更新:我一直在尝试调整,但我找不到。有人吗??????

我尝试了以下代码:

def autocorr(x, t):
return np.corrcoef(np.array([x[:len(x)-t], x[t:len(x)]]))

但这给了我错误:

文件“”,第 1 行 自动校正(df(轴=1,1)) ^ SyntaxError: 位置参数跟随关键字参数

【问题讨论】:

    标签: python statistics jupyter-notebook


    【解决方案1】:

    在我看来,您的函数调用中的括号不匹配。如果有的话,autocorr(df(axis=1, 1)) 应该是 autocorr(df(axis=1), 1),但 pd.DataFrame 对象是不可调用的。

    pd.Series.autocorr(lag=1)函数是不是不能达到你想要的效果?

    import pandas as pd, numpy as np
    series = pd.Series(np.random.randint(100, high=200, size=56))
    print(series.autocorr(lag=1))
    

    产生的值与您的预期相似。

    更新:关于您原来的问题: 因为你有一行 len(x) 是 1 而 x[0:len(x)-1] 是一个空数组! 另外:在这种情况下,np.corrcoef 返回一个 [[1, C], [C, 1]] 形式的 2x2 矩阵。您的 autocorr 函数在以这种方式调用时有效

    df1 = df.copy(deep=True) 
    df1["output"] = autocorr(df.T[0], 1)[0, 1]
    

    我不会将结果附加到df,因为这会改变后续计算的结果。

    【讨论】:

    • ps:如果我想制作 20 个“输出”列,每个列包含 1、2...20 的滞后。最有效的方法是什么?
    猜你喜欢
    • 2016-01-02
    • 2013-09-12
    • 2020-10-15
    • 2016-09-20
    • 2021-07-24
    • 2023-03-06
    • 2017-10-13
    • 2021-10-12
    • 2020-05-04
    相关资源
    最近更新 更多