numpy数组时间点现值

2024-10-03 17:26:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一系列未来现金流,贴现率为0.01。我想计算每个时间点未来现金流的现值。例如,如果我想计算t=0时的现值,我会:

cash_flow = np.array([3, 4, 5, 3, 5])
pv_0 = sum(cf/((1+0.01)**i) for i,cf in emunerate(cash_flow, start=1))

所以在t=1时,我会做同样的事情,除了把所有事情向前移动一个周期:

cash_flow_1 = np.array([4, 5, 3, 5])
pv_1 = sum(cf/((1+0.01)**i) for i,cf in emunerate(cash_flow_1, start=1))

我希望最终结果是一个numpy数组,作为原始现金流数组。有没有比在每个元素上编写for循环更聪明的方法呢

编辑: 受以下对话的启发,我有一个“数组”方法(这只是我说“无循环”的方式…):

discount_array = np.geomspace((1/1.01)**5, 1/1.01, 5)
(np.cumsum(cash_flow[::-1]*discount_array)*np.geomspace((1.01)**4, 1, 5))[::-1]

Tags: infornpcash数组flowarraystart
1条回答
网友
1楼 · 发布于 2024-10-03 17:26:13

试着做以下几点:

def cf_calc(arr):
    return sum(cf/((1+0.01)**i) for i,cf in enumerate(arr, start=1))

cfs_array = np.array([])   
for p in range(len(cash_flow)):
    cfs_array = np.append(cfs_array, cf_calc(cash_flow[p:]))
cfs_array

输出:

array([19.38470144, 16.57854845, 12.74433394,  7.87177728,  4.95049505])

相关问题 更多 >