NumPy:financial irr方法返回'nan'.为什么?

neu*_*rix 5 python arrays numpy financial irr

当我使用numpy方法计算内部收益率(irr)时irr,我收到nan了返回.

In [45]: numpy.irr([-10, 2, 2, 2, 2])
Out[45]: nan
Run Code Online (Sandbox Code Playgroud)

结果不应该至少是负面的吗?比方说-8%?当我试图更好地理解实现时,我查看了NumPy存储库主分支,但实现对我没有任何意义.

评论和给定的文献无助于理解nan发布的条件.当我用另一个程序计算irr时,我得到了-8%的回报.

为什么NumPy返回nan上面的数组?

sas*_*llo 6

如果你看一下这个函数的实现,它只会在(0,1)内寻找IRR的解决方案.这是因为方程可以有多个解决方案,所以只留下一个有效的解决方案.这里它是一个相当的(IMO)糟糕的实现选择,因为IRR当然可以在这个范围之外并且仍然是完全有效的.在你的情况下,我建议你自己编写一个函数(按照现有的函数)来完成你需要的工作.


小智 6

只是对上一个答案的一个小更正。该实现不限制 IRR 为 (0,1],它将 1/(1+IRR) 限制为 (0,1]。这将 IRR 限制为 [0,+Inf。它仍然是一个不完整的实现,因为它返回 NaN对于 IRR 小于 0 的现金流(即投资者赔钱)。IRR 的正确范围是 (-1,+Inf)。然而,修正并非微不足道,因为 NPV(rate) 可以超过一个零,但在速率大于零的情况下不会有超过一个零交叉。因此,将范围限制为 [0,+inf) 作为函数实施意味着您在负 IRR 时失败,但也永远不必处理多个根被归还。

作为旁注,如果您对 NPV(rate) 的行为感到好奇,它会随着 rate 接近 -1 而接近 +Inf 或 -Inf。它接近无穷大的符号与最终现金流的符号相同。另一方面,随着利率接近 +Inf,NPV 逐渐接近序列中初始现金流的值(通常为负现金流)。在 rate = 0 时,NPV 的值是现金流的总和。