我知道蟒允许numpy的阵列xarr = np.array([x0,x1,...xN])
上的实值,一个可变功能f(x)
的快速evalutation:与Python阵列上评价一个多变量函数/ numpy的
f(xarr) = np.array([f(x0), f(x1), ..., f(xN)])
然而,这对于多变量函数来说,它似乎没有语法上的功能。假设我有一个实值函数f(x,y)
,其中x和y是两个实数。有没有一个正确的语法来评估函数,比如说,[(0,0), (0,1), (1,0), (1,1)]
,避免一个循环(这对python总是很慢......)?
编辑:下面是所涉及的功能:
5-变量函数I指的是:
def chisqr(BigOmega, inc, taustar, Q0, U0):
QU = QandU(nusdata, BigOmega, inc, taustar, Q0, U0)
Q = QU[:,0]
U = QU[:,1]
return 1./(2.*N) * (np.sum(((Q - Qs)/errQs)**2.) + np.sum(((U - Us)/errUs)**2.))
其中nusdata, Qs,
和Us
被阵列调用函数之前所定义。该函数调用下面的函数:
def QandU(nu, BigOmega, inc, taustar, Q0, U0):
lambdalong = nu+omega-np.pi/2.
tau3 = taustar * ((1+ecc*np.cos(nu))/(1-ecc**2.))**gamma
delQ = -tau3 * (1+np.cos(inc)*np.cos(inc))*(np.cos(2.*lambdalong) np.sin(inc)*np.sin(inc))
delU = -2*tau3*np.cos(inc)*np.sin(2*lambdalong)
Q = Q0 + delQ*np.cos(BigOmega) - delU * np.sin(BigOmega)
U = U0 + delQ*np.sin(BigOmega) + delU * np.cos(BigOmega)
bounds = (inc < 0) or (inc > np.pi/2.) or (BigOmega < -2*np.pi) or (BigOmega > 2*np.pi) or (taustar < 0.) or (taustar > 1.)
if bounds:
Q = 10E10
U = 10E10
#return U
return np.column_stack((Q,U))
所有变量,不是函数的自变量定义在函数外。
你可以给你想要评估的功能吗? – syntonym
你只需要定义你的函数来接受一个参数(元组或对),但对元组的元素进行操作。像'f = lambda x:x [0] * x [1]'这样简单的东西可以工作。 – wflynny
通常有这样做的方法,但没有一个通用的答案。有些功能很简单,有些功能是不可能的。你需要显示实际的功能。 – tom10