【问题标题】:Syntax Error in function definition函数定义中的语法错误
【发布时间】:2014-09-13 18:44:45
【问题描述】:

我正在尝试定义一个函数,该函数将集成一个将数组作为输入的函数。我知道这可能是不可能的,并且想知道可以做些什么来调和这一点?以下是相关代码:

def mp(SNR2, *events):
    events = np.asarray(events).reshape((Ntrig,Nsamp))
    bessel = special.iv(0,np.sqrt(x*SNR2(event)))
    exp = np.exp(-0.5*(x+SNR2(event)))
    I = integrate.quad(lambda x: exp*bessel,0,SNRth**2)[0]
    return np.asarray([np.array[I for event in events[i]] for i in range(len(events))]).reshape(events.shape)

events 是一个 (37,100) 数组。 SNR2 是之前定义的函数,SNRth 只是一个浮点数。

【问题讨论】:

  • 哇,这行代码长得吓人。这将使调试变得非常困难。错误的完整追溯是什么?
  • 这么长的代码行的好处是几乎不用怀疑错误在哪一行!
  • @user3776468 如果可以的话,请将回溯放在问题中。那行太长了,您的评论被广告掩盖了!
  • 这段代码太糟糕了,它甚至搞砸了 SO HTML 布局!
  • 我认为在np.array 之后缺少一些():尝试np.array([...]) 而不仅仅是np.array[...]

标签: python arrays function numpy integration


【解决方案1】:

您的意思是 (1) 从 np.array 获取商品(可能不是...)还是 (2) 致电 np.array

(1)

def mp(SNR2, *events):
    ...
    return np.asarray([np.array[[I for event in events[i]]] for i in range(len(events))]).reshape(events.shape)

(2)

def mp(SNR2, *events):
    ...
    return np.asarray([np.array([I for event in events[i]]) for i in range(len(events))]).reshape(events.shape)

【讨论】:

    【解决方案2】:

    np.array后面好像少了一些()

    np.array[integrate.quad(lambda: ...,0,SNRth**2)[0] for event in events[i]]
    

    这样,[...] 表达式(您的列表理解)被解释为列表的索引或切片,在这种情况下,... for event in ... 是无效的语法。

    您可能想从列表理解中创建一个np.array。试试这个:

    np.array([integrate.quad(lambda: ...,0,SNRth**2)[0] for event in events[i]])
    

    这将消除语法错误,但此表达式中可能仍存在逻辑错误。虽然 Python 可能很想编写各种复杂的单行代码,但请帮自己一个忙,将其拆分为几行,这样您的编译器就可以为您提供更精确的错误消息,并且您可以检查中间结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      相关资源
      最近更新 更多