diff options
author | Charles Harris <charlesr.harris@gmail.com> | 2009-08-26 20:08:20 +0000 |
---|---|---|
committer | Charles Harris <charlesr.harris@gmail.com> | 2009-08-26 20:08:20 +0000 |
commit | 5e961fa9e0f873ed6e9c01b4dd3248ccce7cfa5a (patch) | |
tree | e8d54871801e65cd1c38cec4ded2582a1ed680de /numpy/lib/financial.py | |
parent | ad6d1ce9b1d53bc15023771e9db401206b4b2654 (diff) | |
download | numpy-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.py | 12 |
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 + |