当前Numpy版本为:1.20
第七章 专用函数
7.9 金融函数
NumPy
中有很多金融函数。
Numpy 1.20
之前的版本导入numpy,直接调用以下函数即可。
(注意!Numpy 1.20
之后的版本移除了金融函数,并将这些函数移至numpy_financial
库。本文numpy
版本为1.20,因此运行以下案例须安装并调用numpy_financial
库,详见https://numpy.org/neps/nep-0032-remove-financial-functions.html)
fv
函数计算所谓的终值(future value),即基于一些假设给出的某个金融资产在未来某一
时间点的价值。pv
函数计算现值(present value),即金融资产当前的价值。npv
函数返回的是净现值(net present value),即按折现率计算的净现金流之和。pmt
函数根据本金和利率计算每期需支付的金额。irr
函数计算内部收益率(internal rate of return)。内部收益率是是净现值为0时的有效利
率,不考虑通胀因素。mirr
函数计算修正后内部收益率(modified internal rate of return),是内部收益率的改进
版本。nper
函数计算定期付款的期数。rate
函数计算利率(rate of interest)。
7.10 动手实践:计算终值
终值是基于一些假设给出的某个金融资产在未来某一时间点的价值。终值决定于4个参数——利率、期数、每期支付金额以及现值。
在本节中,我们以利率3%
、每季度支付金额10
、存款周期5
年以及现值1000
为参数计算终值。
使用正确的参数调用fv
函数,计算终值:
import numpy_financial as npf
print("Future value", npf.fv(0.03/4, 5 * 4, -10, -1000))
结果如下:
Future value 1376.0963320407982
这相当于利率3%的5年期存款并且每季度额外存入10个单位的资金。如果我们改变存款的年数并保持其他参数不变,将得到如下的散点图:
案例完整代码如下:
import numpy_financial as npf
print("Future value", npf.fv(0.03/4, 5 * 4, -10, -1000))
fvals = []
for i in range(1, 10):
fvals.append(npf.fv(.03/4, i * 4, -10, -1000))
import matplotlib.pyplot as plt
plt.plot(fvals, 'bo')
plt.show()
7.11 现值
现值(present value)是指资产在当前时刻的价值。Num
Py中的pv
函数可以计算现值。该函数和fv
函数是镜像对称的,同样需要利率、期数、每期支付金额这些参数,不过这里输入为终值,输出为现值。
7.12 动手实践:计算现值
我们来进行逆向计算——使用前一节教程中的数值计算现值。使用7.10节使用的数值来计算现值。
import numpy_financial as npf
print("Present value", npf.pv(0.03/4, 5 * 4, -10, 1376.0963320407982))
我们预期的计算结果应该为1000。由于我们计算的是支出的现金流,因此结果前面有一个负号。
Present value -1000.0
7.13 净现值
净现值(net present value)定义为按折现率计算的净现金流之和。 NumPy
中的npv
函数返回净现值。该函数需要两个参数,即利率和一个表示现金流的数组。
7.14 动手实践:计算净现值
我们将为一组随机生成的现金流计算净现值。步骤如下。
-
(1) 生成5个随机数作为现金流的取值。插入
-100
作为初始值。import numpy as np import numpy_financial as npf cashflows = np.random.randint(100, size=5) cashflows = np.insert(cashflows, 0, -100) print("Cashflows", cashflows)
生成的现金流如下所示:
Cashflows [-100 21 52 1 87 29]
-
(2) 根据上一步生成的现金流数据,调用
npv
函数计算净现值。利率按3%
计算。print("Net present value", npf.npv(0.03, cashflows))
计算出的净现值如下:
Net present value 72.63250636467717
案例完整代码如下:
import numpy as np
import numpy_financial as npf
cashflows = np.random.randint(100, size=5)
cashflows = np.insert(cashflows, 0, -100)
print("Cashflows", cashflows)
print("Net present value", npf.npv(0.03, cashflows))
7.15 内部收益率
内部收益率(internal rate of return)是净现值为0
时的有效利率,不考虑通胀因素。 NumPy
中的irr
函数根据给定的现金流数据返回对应的内部收益率。
7.16 动手实践:计算内部收益率
这里我们复用7.14节中的现金流数据。使用之前教程中生成的现金流数组,调用irr
函数。
import numpy_financial as npf
print("Internal rate of return", npf.irr([-100, 38, 48, 90, 17, 36]))
计算出的内部收益率如下:
Internal rate of return 0.37342022688802023
7.17 分期付款
NumPy
中的pmt
函数可以根据利率和期数计算贷款每期所需支付的资金。
7.18 动手实践:计算分期付款
假设你贷款100
万,年利率为10%
,要用30
年时间还完贷款,那么每月你必须支付多少资金呢?我们来计算一下。
使用刚才提到的参数值,调用pmt
函数。
import numpy_financial as npf
print("Payment", npf.pmt(0.10/12, 12 * 30, 1000000))
计算出的月供如下所示:
Payment -8775.715700887993
7.19 付款期数
NumPy
中的nper
函数可以计算分期付款所需的期数。所需的参数为贷款利率、固定的月供以及贷款额。
7.20 动手实践:计算付款期数
考虑贷款9000
,年利率10%
,每月固定还款为100
的情形。
通过nper
函数计算出付款期数。
import numpy_financial as npf
print( "Number of payments", npf.nper(0.10/12, -100, 9000))
计算出的付款期数如下:
Number of payments 167.04751180075235
7.21 利率
NumPy
中的rate
函数根据给定的付款期数、每期付款资金、现值和终值计算利率。
7.22 动手实践:计算利率
我们使用7.20节中的数值进行逆向计算,由其他参数得出利率。填入之前教程中的数值作为参数。
import numpy_financial as npf
print("Interest rate", 12 * npf.rate(167, -100, 9000, 0))
如我们所料,计算出的利率约为10%。
Interest rate 0.09997564206640422