我试图定义一个函数,该函数将集成一个以数组作为输入的函数。我知道这可能是不可能的,并且想知道如何协调这一点?以下是相关代码:
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只是一个浮点数。
答案 0 :(得分:0)
你的意思是(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)
答案 1 :(得分:0)
()
之后似乎缺少一些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可能很容易编写各种复杂的单行程序,但请自己帮忙并将其分成几行,这样编译器就可以为您提供更准确的错误消息,并且可以检查中间结果。