[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
## Reimplement the discrete distribution functions using lookup

**From**: |
David Bateman |

**Subject**: |
Reimplement the discrete distribution functions using lookup |

**Date**: |
Thu, 15 Apr 2010 23:50:37 +0200 |

**User-agent**: |
Mozilla-Thunderbird 2.0.0.22 (X11/20090706) |

For information as a follow-up to the bug report
https://savannah.gnu.org/bugs/?29545

`I reimplemented the discrete_cdf, discrete_pdf and discrete_inv function
``that are also used in the empirical_* and unid* functions. A short
``benchmark script is
`
vmax = 1000;
v = 1:vmax;
p = rand(1,vmax);
p = p / sum(p);
for n = [100,500,1000,2000]
x = ceil(vmax*rand(1,n));
y = rand(1,n);
tic
discrete_cdf(x,v,p);
t1 = toc;
tic
discrete_pdf(x,v,p);
t2 = toc;
tic
q = discrete_inv(y,v,p);
t3 = toc;
fprintf ("N %i: CDF %f s, PDF %f s, INV %f s\n", n, t1, t2, t3);
endfor
which when run with a recent tip gives
N 100: CDF 0.033175 s, PDF 0.018628 s, INV 0.022826 s
N 500: CDF 0.064294 s, PDF 0.064881 s, INV 0.073642 s
N 1000: CDF 0.128736 s, PDF 0.130771 s, INV 0.153936 s
N 2000: CDF 0.273697 s, PDF 0.274693 s, INV 0.290557 s
and after the changeset I just pushed
N 100: CDF 0.005032 s, PDF 0.005660 s, INV 0.005447 s
N 500: CDF 0.005283 s, PDF 0.004369 s, INV 0.005893 s
N 1000: CDF 0.005880 s, PDF 0.006766 s, INV 0.006027 s
N 2000: CDF 0.006776 s, PDF 0.006126 s, INV 0.005350 s

`There are probably other statistics functions that could profit from the
``same treatment
`
Cheers
David

**Reimplement the discrete distribution functions using lookup**,
*David Bateman* **<=**