Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用常量和其他变量以及数组numpython进行迭代_Python_Arrays_Function_Numpy_Math - Fatal编程技术网

使用常量和其他变量以及数组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循环,因为它们既慢又低效。