我已经定义了一个函数。这称为“对分”,其代码在帖子下方。
我还有一个名为“ v”的数据框,其中包含7列2行:
$.ajax(
{
url: "/comment/delete/"+id,
type: 'POST',
dataType: "JSON",
data: {
"id": id,
"_method": 'DELETE',
"_token": token,
},
success: function ()
{
console.log("it Work");
}
});
console.log("It failed");
});
您在平分函数中看到我需要四个参数。 f,a,b和N。 这些定义如下:
D P h O Q SD LT
80 27 0.37 50 2 3 1.51
50 27 0.25 50 2 3 0.03
现在,“ f”是一个带有未知变量的函数:“ x”。这是一个匿名函数(lambda x)。二等分函数找到值“ x”,其中f等于零。现在,'f'是一个非常讨厌的派生,是的,我将对其进行清理,但是请不要专注于此,因为函数本身是正确的。因此,“ f”是:
b = 5
a = 0.05
N = 1000
目标是将'bisection-function'应用于数据帧中的每一行:从而添加一个新列,该每一列将给出bisection-function的结果,其中该函数使用所有7列。
现在,当我想应用功能'bisection(f,a,b,N)'时,我尝试了以下代码:
f = lambda x: norm.ppf(1-(v.iloc[i,4]*v.iloc[i,1]*v.iloc[i,2])/(2*v.iloc[i,0]*x))*v.iloc[i,5]*np.sqrt(v.iloc[i,6])*v.iloc[i,1]*v.iloc[i,2]+np.sqrt(2*v.iloc[i,0]*v.iloc[i,3]*v.iloc[i,1]*v.iloc[i,2])-v.iloc[i,0]*x*(((-(norm.ppf(1-(v.iloc[i,4]*v.iloc[i,2]*v.iloc[i,1])/(2*x*v.iloc[i,0]))))*(1-norm.cdf((norm.ppf(1-(v.iloc[i,4]*v.iloc[i,2]*v.iloc[i,1])/(2*x*v.iloc[i,0]))),loc=0,scale=1))+(norm.pdf((norm.ppf(1-(v.iloc[i,4]*v.iloc[i,2]*v.iloc[i,1])/(2*x*v.iloc[i,0]))),loc=0,scale=1)))*v.iloc[i,5]*np.sqrt(v.iloc[i,6])-v.iloc[i,4])/v.iloc[i,4]*-1
这给了我以下结果:
for i in range(0,2,1):
v['k'] = bisection(f,a,b,N)
如您所见,它为'x'找到正确的值,但仅为第二行找到。第一行的结果是4.50 ..当我将代码更改为:
D P h O Q SD LT k
80 27 0.37 50 2 3 1.51 3.814891
50 27 0.25 50 2 3 0.03 3.814891
我得到:
for i in range(0,1,1):
v['k'] = bisection(f,a,b,N)
所以我想要的结果是:
D P h O Q SD LT k
80 27 0.37 50 2 3 1.51 4.503648
50 27 0.25 50 2 3 0.03 4.503648
我该如何实现?
我也尝试通过将'f'更改为:
D P h O Q SD LT k
80 27 0.37 50 2 3 1.51 4.503648
50 27 0.25 50 2 3 0.03 3.814891
并尝试使用以下代码进行迭代:
f = lambda x: norm.ppf(1-(v.Q*v.P*v.h)/(2*v.D*x))*v.SD*np.sqrt(v.LT)*v.P*v.h+np.sqrt(2*v.D*v.O*v.P*v.h)-v.D*x*(((-(norm.ppf(1-(v.Q*v.P*v.h)/(2*x*v.D))))*(1-norm.cdf((norm.ppf(1-(v.Q*v.P*v.h)/(2*x*v.D))),loc=0,scale=1))+(norm.pdf((norm.ppf(1-(v.Q*v.P*v.h)/(2*x*v.D))),loc=0,scale=1)))*v.SD*np.sqrt(v.LT)-v.Q)/v.Q*-1
但是然后我得到了错误:
for index, row in df.iterrows():
v.append(bisection(f,a,b,N))
有人可以帮助我吗?
二等分函数的代码:
ValueError: The truth value of a Series is ambiguous. Use a.empty,
a.bool(), a.item(), a.any() or a.all().
答案 0 :(得分:2)
您的代码:
for i in range(0,2,1):
v['k'] = bisection(f,a,b,N)
只需将新列“ k”的所有值设置为每次迭代中二等分函数计算出的任何值
创建一个序列并将其分配给新行“ k”,也许是这样的
v['k'] = pd.Series([bisection(f,a,b,N) for i in range(2)], index = v.index)