Почему кажется, что Python падает, когда я создаю вложенный список объектов?

Я новичок в 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][:] не работают. Я просмотрел создание списка объектов в Python и Вложенные списки Python

Позже ll[1] будет другим, например. (2,1). sm.tsa.ARMA работает, если вы запускаете тело цикла с помощью kk=0 "вручную".

В конце концов, я хотел бы получить доступ к значениям fit[:][:].bic.

Мне очень жаль, я чувствую, что это основной вопрос синтаксиса...

Я использую Canopy на Windows 7.

Изменить: Кроме того,

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)])

не работает.


person user3042711    schedule 05.08.2014    source источник
comment
Какая у вас ошибка?   -  person sapi    schedule 05.08.2014
comment
он просто зависает, пока я не перезапущу ядро   -  person user3042711    schedule 05.08.2014
comment
А, я только что узнал, что могу посмотреть подробности. Ядро (пользовательская среда Python) завершило работу с кодом ошибки -805306369. Это может быть связано с ошибкой в ​​вашем коде или в самом ядре. было возвращено при моей попытке с .append   -  person user3042711    schedule 05.08.2014


Ответы (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, но это только мои предпочтения.

person alexkonradi    schedule 05.08.2014