summaryrefslogtreecommitdiff
path: root/numpy/lib/financial.py
diff options
context:
space:
mode:
authorCharles Harris <charlesr.harris@gmail.com>2009-08-26 20:08:20 +0000
committerCharles Harris <charlesr.harris@gmail.com>2009-08-26 20:08:20 +0000
commit5e961fa9e0f873ed6e9c01b4dd3248ccce7cfa5a (patch)
treee8d54871801e65cd1c38cec4ded2582a1ed680de /numpy/lib/financial.py
parentad6d1ce9b1d53bc15023771e9db401206b4b2654 (diff)
downloadnumpy-5e961fa9e0f873ed6e9c01b4dd3248ccce7cfa5a.tar.gz
Fix mirr function and its test. Thanks go to Skipper and Josef.
Diffstat (limited to 'numpy/lib/financial.py')
-rw-r--r--numpy/lib/financial.py12
1 files changed, 4 insertions, 8 deletions
diff --git a/numpy/lib/financial.py b/numpy/lib/financial.py
index 5d1e65f5c..503d43647 100644
--- a/numpy/lib/financial.py
+++ b/numpy/lib/financial.py
@@ -626,16 +626,12 @@ def mirr(values, finance_rate, reinvest_rate):
"""
values = np.asarray(values, dtype=np.double)
- initial = values[0]
- values = values[1:]
n = values.size
pos = values > 0
neg = values < 0
if not (pos.any() and neg.any()):
return np.nan
- numer = np.abs(npv(reinvest_rate, values*pos))
- denom = np.abs(npv(finance_rate, values*neg))
- if initial > 0:
- return ((initial + numer) / denom)**(1.0/n)*(1 + reinvest_rate) - 1
- else:
- return ((numer / (-initial + denom)))**(1.0/n)*(1 + reinvest_rate) - 1
+ numer = np.abs(npv(reinvest_rate, values*pos))*(1 + reinvest_rate)
+ denom = np.abs(npv(finance_rate, values*neg))*(1 + finance_rate)
+ return (numer/denom)**(1.0/(n - 1))*(1 + reinvest_rate) - 1
+