用于贴现债券息票的 For 循环
For-loop for discounting bond coupons
关于如何编写 for 循环以提供所有优惠券的现值(即折扣值)的快速问题。我的代码如下所示:
我想要一个for循环来做这个操作
c[0]*np.exp(-r*1)
c[1]*np.exp(-r*2)
c[2]*np.exp(-r*3)
等等(-r 的次数总是索引+1)。
我想要所有值的总和,例如使用 x+= for 循环迭代
c=[7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5]
r=0.071
PVx=0
for i in c:
print(i)
year = c.index(i)+1
print(year)
PV=c[i]*np.exp(-r*year)
PVx += PV
print(PVx)
我的 PV 变量以某种方式收到错误代码 "TypeError: list indices must be integers or slices, not float"。
本质上,我想让列表中的每个值乘以 np.exp(-r* index position +1) 然后得到总和 :S
编辑:
我的新密码
import numpy as np
c=[7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5]
r=0.071
PVx=0
for i in c:
year = c.index(i)+1
print(year)
PV=i*np.exp(-r*year)
PVx += PV
print(PVx)
将年份打印为 1(意味着 c.index(i) 产生 0 +1 = 1),而我希望它从 1 变为 7。我想我现在的问题是。
错误解释了问题:“TypeError: list indices must be integers or slices, not float
”浮点数是带小数点的数字,即不是整数。例如 7.5。那是你的问题。
我的新代码 [...] 将年份打印为 1(意味着 c.index(i) 产生 0 +1 = 1),而我希望它从1 到 7.
list.index(i)
returns 出现 i
的第一个索引,如果 i
不在列表中,则为 -1。
NumPy 解决方案:
import numpy as np
r = 0.071
arr_1 = np.full(shape=7, fill_value=7.5)
print(arr_1)
arr_2 = np.exp(-r * np.arange(1, arr_1.shape[0] + 1))
print(arr_2)
arr_3 = arr_1 * arr_2
print(arr_3)
print(arr_3.sum())
输出:
[7.5 7.5 7.5 7.5 7.5 7.5 7.5]
[0.93146189 0.86762126 0.80815614 0.75276664 0.70117344 0.65311634
0.60835298]
[6.98596419 6.50715942 6.06117103 5.64574984 5.25880082 4.89837257
4.56264738]
39.919865247574606
循环解决方案:
import math
from pprint import pprint
r = 0.071
vals = [7.5 * math.exp(-r * i) for i in range(1, 8)]
pprint(vals)
pprint(sum(vals))
输出:
[6.985964190956941,
6.507159423644355,
6.0611710291236625,
5.645749835296472,
5.258800824064293,
4.898372565905067,
4.562647378583822]
39.919865247574606
我不能完全确定我是否理解您要尝试做的事情,所以如果我遗漏了什么,请告诉我。
关于如何编写 for 循环以提供所有优惠券的现值(即折扣值)的快速问题。我的代码如下所示:
我想要一个for循环来做这个操作
c[0]*np.exp(-r*1)
c[1]*np.exp(-r*2)
c[2]*np.exp(-r*3)
等等(-r 的次数总是索引+1)。 我想要所有值的总和,例如使用 x+= for 循环迭代
c=[7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5]
r=0.071
PVx=0
for i in c:
print(i)
year = c.index(i)+1
print(year)
PV=c[i]*np.exp(-r*year)
PVx += PV
print(PVx)
我的 PV 变量以某种方式收到错误代码 "TypeError: list indices must be integers or slices, not float"。 本质上,我想让列表中的每个值乘以 np.exp(-r* index position +1) 然后得到总和 :S
编辑:
我的新密码
import numpy as np
c=[7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5]
r=0.071
PVx=0
for i in c:
year = c.index(i)+1
print(year)
PV=i*np.exp(-r*year)
PVx += PV
print(PVx)
将年份打印为 1(意味着 c.index(i) 产生 0 +1 = 1),而我希望它从 1 变为 7。我想我现在的问题是。
错误解释了问题:“TypeError: list indices must be integers or slices, not float
”浮点数是带小数点的数字,即不是整数。例如 7.5。那是你的问题。
我的新代码 [...] 将年份打印为 1(意味着 c.index(i) 产生 0 +1 = 1),而我希望它从1 到 7.
list.index(i)
returns 出现 i
的第一个索引,如果 i
不在列表中,则为 -1。
NumPy 解决方案:
import numpy as np
r = 0.071
arr_1 = np.full(shape=7, fill_value=7.5)
print(arr_1)
arr_2 = np.exp(-r * np.arange(1, arr_1.shape[0] + 1))
print(arr_2)
arr_3 = arr_1 * arr_2
print(arr_3)
print(arr_3.sum())
输出:
[7.5 7.5 7.5 7.5 7.5 7.5 7.5]
[0.93146189 0.86762126 0.80815614 0.75276664 0.70117344 0.65311634
0.60835298]
[6.98596419 6.50715942 6.06117103 5.64574984 5.25880082 4.89837257
4.56264738]
39.919865247574606
循环解决方案:
import math
from pprint import pprint
r = 0.071
vals = [7.5 * math.exp(-r * i) for i in range(1, 8)]
pprint(vals)
pprint(sum(vals))
输出:
[6.985964190956941,
6.507159423644355,
6.0611710291236625,
5.645749835296472,
5.258800824064293,
4.898372565905067,
4.562647378583822]
39.919865247574606
我不能完全确定我是否理解您要尝试做的事情,所以如果我遗漏了什么,请告诉我。