2015-01-13 3 views
-3

Почему он дает SyntaxError: недопустимый синтаксис во второй последней строке for jindx in xrange(1, 10):? Это происходит с любой командой я попробоватьНеожиданный синтаксисError: недопустимый синтаксис в вложенных циклах

import numpy as np 
from __future__ import division 

def olsgmm(lhv, rhv, lags, wight): 
    global Exxprim 
    global inner 
    if len(rhv[:,]) != len(lhv[:,]): 
     print ("olsgmm: leftand right sides must have same number of rows. Currentlyrows are:") 
     len(lhv) 
     len(rhv) 
    T = len(lhv[:,]) 
    N = len(lhv[:,1]) 
    K = len(rhv[:,1]) 
    sebv = np.zeros() 
    Exxprim = np.linalg.inv((rhv.T * rhv)/T) 
    bv = np.linalg.lstsq(rhv, lhv) 
    if (len(weight[:,]) == 1 & len(lhv[:,1]) > 1): 
     weight = weight * np.ones(len(lhv[:,1]),) 
    if (len(lags[:,]) == 1 & len(lhv[:,1]) > 1): 
     lags = lags * np.ones(len(lhv[:,1]),) 
    if weight == -1: 
     sebv = float('nan') 
     R2v = float('nan') 
     R2vadj = float('nan') 
     v = float('nan') 
     F = float('nan') 
    else: 
     errv = lhv - rhv * bv 
     s2 = np.mean(np.power(err, 2)) 
     vary = lhv - np.ones(T, 1) 
     vary = np.mean(np.power(vary, 2)) 
     R2v = (1 - np.divide(s2, vary)) 
     R2adj = (1 - (np.divide(s2, vary)) * (T - 1)/(T - K)).T 
     for indx in xrange(1, N + 1): 
      err = errv[:,indx] 
      if (weight[indx] == 0 | weight[indx] == 1): 
       inner = (np.multiply(rhv, (err * np.ones(1,k))).T * (np.multiply(rhv, np.ones(1, K)))/T 
       for jindx in xrange(1, 10): 
        inneradd = ([np.multiply(rhv, err) for j in xrange(1, T - jindx)] * np.ones(1, k)).T 

В дополнении к этому, когда я бегу numpy.linalg.lstsq() в линии 16, RHV и LHV оба К й N матрицы (RHV первой строки перехват и вторая строка регрессор), он дает мне 4 N x N массива коэффициентов. Кто-нибудь знает, как выполнить правильную совместную выходную регрессию ls, чтобы в итоге получить 2 K x N массив коэффициентов?

ответ

2

Вы пропустили в ) на предыдущей строке:

inner = (np.multiply(rhv, (err * np.ones(1,k))).T * (np.multiply(rhv, np.ones(1, K)))/T 
#  ^   2  3    4 432  2   3   4 432 ? 

Это внешняя пара скобок будет излишним, однако; вам не нужно группировать выражение верхнего уровня. Есть еще две пары избыточных круглых скобок; следующее должно работать нормально:

np.multiply(rhv, err * np.ones(1, k)).T * np.multiply(rhv, np.ones(1, K))/T 

Поскольку Python позволяет логические линии, чтобы охватить несколько физических строк исходного кода, заключив их в круглые скобки (или квадратные скобки или фигурные скобки) for линия является частью обижая линии так как нет закрытого ).

Итак, эмпирическое правило: когда вы получаете SyntaxError, который, как представляется, не имеет смысла, проверьте предыдущие строки на отсутствие закрывающейся скобки.

+0

Какой дурак я – chabert

Смежные вопросы