使用常量和其他变量以及数组numpython进行迭代
我试图修改下面的函数,以便它给出下面的预期输出。对于第一次计算,它类似于使用常量和其他变量以及数组numpython进行迭代,python,arrays,function,numpy,math,Python,Arrays,Function,Numpy,Math,我试图修改下面的函数,以便它给出下面的预期输出。对于第一次计算,它类似于100+100*-87/100=13,等式为NonC\u Amount+Int\u Amount*np.cumprod(PnL/100)。由于-87是PnL中的第一个元素,对于第二次计算,它将变为13+100*-4/100=9。非现金金额值将被更新 PnL = np.array([-87., -4., -34.1, 8.5]) Int_amount = 100 NonC_Amount = 100 PnL.prod(initi
100+100*-87/100=13
,等式为NonC\u Amount+Int\u Amount*np.cumprod(PnL/100)
。由于-87是PnL中的第一个元素,对于第二次计算,它将变为13+100*-4/100=9
。非现金金额值将被更新
PnL = np.array([-87., -4., -34.1, 8.5])
Int_amount = 100
NonC_Amount = 100
PnL.prod(initial=Int_amount)
NonCompounding =NonC_Amount + Int_amount * np.cumprod(PnL / 100)
电流输出:
[ 13, 103.48 , 98.81332, 99.8991322]
预期产出:
[ 13, 9, -25.1, -16.6]
你做了错误的计算。从你的描述来看,你似乎想这样做
NonC_Amount = 100
NonCompounding = np.zeros_like(PnL)
for i in range(PnL.shape[0]):
NonCompounding[i] = NonC_Amount + Int_amount * PnL[i] / 100
NonC_Amount = NonCompounding[i]
编辑:如果要将此操作矢量化,可以执行以下操作
NonCompounding = NonC_Amount + np.cumsum(Int_amount * PnL / 100)
np.cumprod()
提供到第i个元素的累计乘积。对于np.cumprod(PnL)
[-87, -87*(-4), -87*(-4)*(-34.1), etc...]
这只是纯粹的偶然,它给出了第一个元素的正确结果。你做了错误的计算。从你的描述来看,你似乎想这样做
NonC_Amount = 100
NonCompounding = np.zeros_like(PnL)
for i in range(PnL.shape[0]):
NonCompounding[i] = NonC_Amount + Int_amount * PnL[i] / 100
NonC_Amount = NonCompounding[i]
编辑:如果要将此操作矢量化,可以执行以下操作
NonCompounding = NonC_Amount + np.cumsum(Int_amount * PnL / 100)
np.cumprod()
提供到第i个元素的累计乘积。对于np.cumprod(PnL)
[-87, -87*(-4), -87*(-4)*(-34.1), etc...]
这完全是偶然的,它为第一个元素提供了正确的结果。我已经更新了这个问题,很抱歉错误应该是-16。而不是16岁。如果可能的话,我会尽量避免for循环,因为它们速度慢且效率低。我已经更新了这个问题,很抱歉错误应该是-16。而不是16岁。如果可能的话,我会尽量避免for循环,因为它们既慢又低效。