首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numpy净现值计算

Numpy净现值计算
EN

Stack Overflow用户
提问于 2012-08-12 16:48:37
回答 2查看 4.1K关注 0票数 4

我正在用numpy和我自己的代码计算NPV,结果是不同的。我一定是在哪里犯了个错误。有指针吗?

代码语言:javascript
复制
// Solution 1
r = .06
flows = {0:1200, 3:-450, 6:-450, 15:-450}
print  sum([C/(1+r)**i for i,C in flows.iteritems()])
// => 317

// Solution using numpy's npv function
flows = zeros(16)
flows[0] = 1200
flows[3] = -450
flows[6] = -450
flows[15]= -450
print np.npv(r, flows)
// => 299
EN

回答 2

Stack Overflow用户

发布于 2012-08-12 17:03:50

看起来(尽管它说的是在医生里),np.npv开始用t= 1,而不是t=0求和:

代码语言:javascript
复制
In [56]: r = 0.06

In [57]: R = r+1

In [58]: (1200/R**0 - 450/R**3 - 450/R**6 - 450/R**15)
Out[58]: 317.16980210661666

In [59]: (1200/R**0 - 450/R**3 - 450/R**6 - 450/R**15)/R
Out[59]: 299.21679444020435

In [64]: np.npv(r, flows)*(1+r)
Out[64]: 317.16980210661683

的确,np.npv这样定义

代码语言:javascript
复制
def npv(rate, values):
    values = np.asarray(values)
    return (values / (1+rate)**np.arange(1,len(values)+1)).sum(axis=0)
票数 6
EN

Stack Overflow用户

发布于 2013-11-24 18:04:35

这是在numpy 1.8中修复的

修正到financial.npv npv函数有一个错误。与文档声明的相反,它从索引1到M,而不是从0到M1。修复更改了返回的值。mirr函数称为npv函数,但它解决了这个问题,因此这也是固定的,并且mirr函数的返回值保持不变。

NumPy 1.8.0发行说明

如果我在np.npv中使用numpy 1.8,我会得到:

代码语言:javascript
复制
import numpy as np

r = .06

flows = np.zeros(16)
flows[0] = 1200
flows[3] = -450
flows[6] = -450
flows[15]= -450

result = np.npv(r, flows)

结果:

代码语言:javascript
复制
>>> result
317.16980210661666
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11923953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档