净现值(Net Present Value,NPV)是金融理论中用于评估投资项目价值的指标。其核心思想是将未来现金流按一定贴现率折算为当前价值,并减去初始投资成本。若NPV为正,表明项目预期收益高于成本,具有投资价值;反之则可能不值得投资。
NPV公式

其中:
- (C_t) 是第 (t) 期的现金流(初始投资 (C_0) 通常为负值)。
- (r) 是贴现率。
- (t) 是时间周期。
Python实现方法
方法1:纯Python实现
通过遍历现金流列表,逐项计算现值并累加。
python
def calculate_npv(rate, cash_flows):
npv = 0.0
for t, cf in enumerate(cash_flows):
npv += cf / (1 + rate)**t
return npv
# 示例
cash_flows = [-100, 50, 60, 70] # 初始投资-100,后续三年现金流
discount_rate = 0.1 # 贴现率10%
result = calculate_npv(discount_rate, cash_flows)
print(f"NPV: {result:.2f}") # 输出: NPV: 47.63
方法2:使用NumPy库
NumPy提供npv
函数,但需注意其假设现金流从 (t=1) 开始,因此需单独处理初始投资。
python
import numpy as np
cash_flows = [-100, 50, 60, 70]
discount_rate = 0.1
# numpy.npv的现金流从t=1开始,需手动加上t=0的现金流
npv_numpy = cash_flows[0] + np.npv(discount_rate, cash_flows[1:])
print(f"NPV (NumPy): {npv_numpy:.2f}") # 输出: NPV (NumPy): 47.63
注意事项
- 时间对齐:确保现金流列表的第一个元素对应 (t=0)(即初始投资)。
- 贴现率范围:贴现率应大于-1(避免分母为零或负数)。
- 结果解读:NPV > 0 表示项目可行,NPV < 0 则可能拒绝。
示例验证
对于现金流 [-100, 50, 60, 70]
和贴现率10%:

计算结果与代码输出一致,验证正确性。