意外的SyntaxError:嵌套循环中的语法无效

时间:2015-01-13 14:37:07

标签: python if-statement syntax-error nested-loops iterable

为什么它会在第二行for jindx in xrange(1, 10):中给出SyntaxError:无效语法? 它发生在我尝试的任何命令

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

除此之外,当我在第16行运行numpy.linalg.lstsq()时,rhv和lhv都是K x N矩阵(rhv第一行是截距,第二行是回归),它给出了4 N x N数组系数。有谁知道如何执行正确的联合输出ls回归,以便最终得到2 K x N系数的数组?

1 个答案:

答案 0 :(得分: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行是违规行的一部分,因为没有关闭{{ 1}}发现了。

所以,经验法则:当你得到一个似乎没有意义的)时,请检查前面几行是否缺少右括号。