【问题标题】:Why seems Python to crash when I create a nested list of objects?当我创建嵌套的对象列表时,为什么 Python 似乎会崩溃?
【发布时间】:2014-09-27 14:48:40
【问题描述】:

我是 Python 的新手,只是四处涂鸦以了解该语言。基本上,我想产生随机游走并对其进行分析。但是,我无法完成具有不同 ARMA 模型的适合对象列表,适合不同的随机游走实现。

    import numpy as np
    import matplotlib.pyplot as plt
    import statsmodels.api as sm
    def randwalk(N,sigma):
        k=1
        R=np.zeros(N)
        while(k<N):
            R[k]=R[k-1]+np.random.randn(1)*sigma
            k+=1
        return R
    m=3
    N=100
    R1=np.zeros((N,m))
    for k in range(m): 
        R1[:,k]=randwalk(N,0.1)

    plt.plot(range(N),(R1))
    plt.show()
    ll= [(2,0),(2,0)]
    fit=[]
    for kk in range(len(ll)):
        fit[kk]= [sm.tsa.ARMA(R1[:,ii], order=ll[kk]).fit() for ii in range(m)]

fit[kk]fit[kk][:] 似乎都不起作用。我调查过Creating a list of objects in PythonNested lists python

稍后,ll[1] 会有所不同,例如(2,1)。如果您使用kk=0“手动”运行循环体,sm.tsa.ARMA 似乎可以工作。

最后,我想访问fit[:][:].bic 值。

真的很抱歉,我觉得这是一个基本的语法问题......

我在 Windows 7 上使用 Canopy。

编辑:另外,

ll= [(2,0),(2,0)]
fit=[]
for kk in range(len(ll)):
    fit.append([sm.tsa.ARMA(R1[:,ii], order=ll[kk]).fit() for ii in range(m)])

没用。

【问题讨论】:

  • 你得到什么错误?
  • 它只是冻结,直到我重新启动内核
  • 啊,我才发现我可以看看细节。 内核(用户 Python 环境)已终止,错误代码为 -805306369。这可能是由于您的代码或内核本身存在错误。 在我尝试使用 .append 时返回

标签: python numpy canopy statsmodels


【解决方案1】:

与矩阵不同,列表具有可变大小并且以空开头,因此访问新列表的第三个元素是没有意义的。您可以提前创建一个预先确定(但不是固定)大小的列表,然后对其进行索引,或者您可以将项目附加到列表的末尾:

# Create then assign
ll = [None] * some_length    # or ll = range(some_length)
for k in range(some_length):
    ll[k] = some_object[k]

# Append:
ll = list() # list() is equivalent to []
for k in range(some_length):
    ll.append(some_object[k])

我更喜欢append 方法,但这只是我的偏好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多