Skip to content

Commit f2d2150

Browse files
bench: refactor random number generation in stats/base/dists/cauchy
PR-URL: #4850 Reviewed-by: Athan Reines <[email protected]>
1 parent c97212e commit f2d2150

File tree

12 files changed

+210
-76
lines changed

12 files changed

+210
-76
lines changed

lib/node_modules/@stdlib/stats/base/dists/cauchy/cdf/benchmark/benchmark.js

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
// MODULES //
2222

2323
var bench = require( '@stdlib/bench' );
24-
var randu = require( '@stdlib/random/base/randu' );
24+
var Float64Array = require( '@stdlib/array/float64' );
25+
var uniform = require( '@stdlib/random/base/uniform' );
2526
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2627
var EPS = require( '@stdlib/constants/float64/eps' );
2728
var pkg = require( './../package.json' ).name;
@@ -32,17 +33,25 @@ var cdf = require( './../lib' );
3233

3334
bench( pkg, function benchmark( b ) {
3435
var gamma;
36+
var len;
3537
var x0;
3638
var x;
3739
var y;
3840
var i;
3941

42+
len = 100;
43+
x = new Float64Array( len );
44+
x0 = new Float64Array( len );
45+
gamma = new Float64Array( len );
46+
for ( i = 0; i < len; i++ ) {
47+
x[ i ] = uniform( -100.0, 100.0 );
48+
x0[ i ] = uniform( -50.0, 50.0 );
49+
gamma[ i ] = uniform( EPS, 20.0 );
50+
}
51+
4052
b.tic();
4153
for ( i = 0; i < b.iterations; i++ ) {
42-
x = ( randu()*200.0 ) - 100;
43-
x0 = ( randu()*100.0 ) - 50.0;
44-
gamma = ( randu()*20.0 ) + EPS;
45-
y = cdf( x, x0, gamma );
54+
y = cdf( x[ i % len ], x0[ i % len ], gamma[ i % len ] );
4655
if ( isnan( y ) ) {
4756
b.fail( 'should not return NaN' );
4857
}
@@ -58,6 +67,7 @@ bench( pkg, function benchmark( b ) {
5867
bench( pkg+':factory', function benchmark( b ) {
5968
var mycdf;
6069
var gamma;
70+
var len;
6171
var x0;
6272
var x;
6373
var y;
@@ -66,11 +76,15 @@ bench( pkg+':factory', function benchmark( b ) {
6676
x0 = 0.0;
6777
gamma = 1.5;
6878
mycdf = cdf.factory( x0, gamma );
79+
len = 100;
80+
x = new Float64Array( len );
81+
for ( i = 0; i < len; i++ ) {
82+
x[ i ] = uniform( EPS, 100.0 );
83+
}
6984

7085
b.tic();
7186
for ( i = 0; i < b.iterations; i++ ) {
72-
x = ( randu()*100.0 ) + EPS;
73-
y = mycdf( x );
87+
y = mycdf( x[ i % len ] );
7488
if ( isnan( y ) ) {
7589
b.fail( 'should not return NaN' );
7690
}

lib/node_modules/@stdlib/stats/base/dists/cauchy/ctor/benchmark/benchmark.js

Lines changed: 87 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
// MODULES //
2222

2323
var bench = require( '@stdlib/bench' );
24-
var randu = require( '@stdlib/random/base/randu' );
24+
var Float64Array = require( '@stdlib/array/float64' );
25+
var uniform = require( '@stdlib/random/base/uniform' );
2526
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2627
var EPS = require( '@stdlib/constants/float64/eps' );
2728
var pkg = require( './../package.json' ).name;
@@ -33,14 +34,21 @@ var Cauchy = require( './../lib' );
3334
bench( pkg+'::instantiation', function benchmark( b ) {
3435
var gamma;
3536
var dist;
37+
var len;
3638
var x0;
3739
var i;
3840

41+
len = 100;
42+
x0 = new Float64Array( len );
43+
gamma = new Float64Array( len );
44+
for ( i = 0; i < len; i++ ) {
45+
x0[ i ] = uniform( EPS, 10.0 );
46+
gamma[ i ] = uniform( EPS, 10.0 );
47+
}
48+
3949
b.tic();
4050
for ( i = 0; i < b.iterations; i++ ) {
41-
x0 = ( randu() * 10.0 ) + EPS;
42-
gamma = ( randu() * 10.0 ) + EPS;
43-
dist = new Cauchy( x0, gamma );
51+
dist = new Cauchy( x0[ i % len ], gamma[ i % len ] );
4452
if ( !( dist instanceof Cauchy ) ) {
4553
b.fail( 'should return a distribution instance' );
4654
}
@@ -82,19 +90,24 @@ bench( pkg+'::get:x0', function benchmark( b ) {
8290
bench( pkg+'::set:x0', function benchmark( b ) {
8391
var gamma;
8492
var dist;
93+
var len;
8594
var x0;
8695
var y;
8796
var i;
8897

8998
x0 = 10.0;
9099
gamma = 6.0;
91100
dist = new Cauchy( x0, gamma );
101+
len = 100;
102+
y = new Float64Array( len );
103+
for ( i = 0; i < len; i++ ) {
104+
y[ i ] = uniform( EPS, 100.0 );
105+
}
92106

93107
b.tic();
94108
for ( i = 0; i < b.iterations; i++ ) {
95-
y = ( 100.0*randu() ) + EPS;
96-
dist.x0 = y;
97-
if ( dist.x0 !== y ) {
109+
dist.x0 = y[ i % len ];
110+
if ( dist.x0 !== y[ i % len ] ) {
98111
b.fail( 'should return set value' );
99112
}
100113
}
@@ -135,19 +148,24 @@ bench( pkg+'::get:gamma', function benchmark( b ) {
135148
bench( pkg+'::set:gamma', function benchmark( b ) {
136149
var gamma;
137150
var dist;
151+
var len;
138152
var x0;
139153
var y;
140154
var i;
141155

142156
x0 = 10.0;
143157
gamma = 6.0;
144158
dist = new Cauchy( x0, gamma );
159+
len = 100;
160+
y = new Float64Array( len );
161+
for ( i = 0; i < len; i++ ) {
162+
y[ i ] = uniform( EPS, 100.0 );
163+
}
145164

146165
b.tic();
147166
for ( i = 0; i < b.iterations; i++ ) {
148-
y = ( 100.0*randu() ) + EPS;
149-
dist.gamma = y;
150-
if ( dist.gamma !== y ) {
167+
dist.gamma = y[ i % len ];
168+
if ( dist.gamma !== y[ i % len ] ) {
151169
b.fail( 'should return set value' );
152170
}
153171
}
@@ -162,17 +180,24 @@ bench( pkg+'::set:gamma', function benchmark( b ) {
162180
bench( pkg+':entropy', function benchmark( b ) {
163181
var gamma;
164182
var dist;
183+
var len;
165184
var x0;
185+
var x;
166186
var y;
167187
var i;
168188

169189
x0 = 10.0;
170190
gamma = 6.0;
171191
dist = new Cauchy( x0, gamma );
192+
len = 100;
193+
x = new Float64Array( len );
194+
for ( i = 0; i < len; i++ ) {
195+
x[ i ] = uniform( EPS, 100.0 );
196+
}
172197

173198
b.tic();
174199
for ( i = 0; i < b.iterations; i++ ) {
175-
dist.x0 = ( 100.0*randu() ) + EPS;
200+
dist.x0 = x[ i % len ];
176201
y = dist.entropy;
177202
if ( isnan( y ) ) {
178203
b.fail( 'should not return NaN' );
@@ -189,17 +214,24 @@ bench( pkg+':entropy', function benchmark( b ) {
189214
bench( pkg+':median', function benchmark( b ) {
190215
var gamma;
191216
var dist;
217+
var len;
192218
var x0;
219+
var x;
193220
var y;
194221
var i;
195222

196223
x0 = 10.0;
197224
gamma = 6.0;
198225
dist = new Cauchy( x0, gamma );
226+
len = 100;
227+
x = new Float64Array( len );
228+
for ( i = 0; i < len; i++ ) {
229+
x[ i ] = uniform( EPS, 100.0 );
230+
}
199231

200232
b.tic();
201233
for ( i = 0; i < b.iterations; i++ ) {
202-
dist.x0 = ( 100.0*randu() ) + EPS;
234+
dist.x0 = x[ i % len ];
203235
y = dist.median;
204236
if ( isnan( y ) ) {
205237
b.fail( 'should not return NaN' );
@@ -216,17 +248,24 @@ bench( pkg+':median', function benchmark( b ) {
216248
bench( pkg+':mode', function benchmark( b ) {
217249
var gamma;
218250
var dist;
251+
var len;
219252
var x0;
253+
var x;
220254
var y;
221255
var i;
222256

223257
x0 = 10.0;
224258
gamma = 6.0;
225259
dist = new Cauchy( x0, gamma );
260+
len = 100;
261+
x = new Float64Array( len );
262+
for ( i = 0; i < len; i++ ) {
263+
x[ i ] = uniform( 1.0 + EPS, 100.0 );
264+
}
226265

227266
b.tic();
228267
for ( i = 0; i < b.iterations; i++ ) {
229-
dist.x0 = ( 100.0*randu() ) + 1.0 + EPS;
268+
dist.x0 = x[ i % len ];
230269
y = dist.mode;
231270
if ( isnan( y ) ) {
232271
b.fail( 'should not return NaN' );
@@ -243,6 +282,7 @@ bench( pkg+':mode', function benchmark( b ) {
243282
bench( pkg+':cdf', function benchmark( b ) {
244283
var gamma;
245284
var dist;
285+
var len;
246286
var x0;
247287
var x;
248288
var y;
@@ -251,11 +291,15 @@ bench( pkg+':cdf', function benchmark( b ) {
251291
x0 = 10.0;
252292
gamma = 6.0;
253293
dist = new Cauchy( x0, gamma );
294+
len = 100;
295+
x = new Float64Array( len );
296+
for ( i = 0; i < len; i++ ) {
297+
x[ i ] = uniform( 0.0, 1.0 );
298+
}
254299

255300
b.tic();
256301
for ( i = 0; i < b.iterations; i++ ) {
257-
x = randu();
258-
y = dist.cdf( x );
302+
y = dist.cdf( x[ i % len ] );
259303
if ( isnan( y ) ) {
260304
b.fail( 'should not return NaN' );
261305
}
@@ -271,6 +315,7 @@ bench( pkg+':cdf', function benchmark( b ) {
271315
bench( pkg+':logcdf', function benchmark( b ) {
272316
var gamma;
273317
var dist;
318+
var len;
274319
var x0;
275320
var x;
276321
var y;
@@ -279,11 +324,15 @@ bench( pkg+':logcdf', function benchmark( b ) {
279324
x0 = 10.0;
280325
gamma = 6.0;
281326
dist = new Cauchy( x0, gamma );
327+
len = 100;
328+
x = new Float64Array( len );
329+
for ( i = 0; i < len; i++ ) {
330+
x[ i ] = uniform( 0.0, 1.0 );
331+
}
282332

283333
b.tic();
284334
for ( i = 0; i < b.iterations; i++ ) {
285-
x = randu();
286-
y = dist.logcdf( x );
335+
y = dist.logcdf( x[ i % len ] );
287336
if ( isnan( y ) ) {
288337
b.fail( 'should not return NaN' );
289338
}
@@ -299,6 +348,7 @@ bench( pkg+':logcdf', function benchmark( b ) {
299348
bench( pkg+':logpdf', function benchmark( b ) {
300349
var gamma;
301350
var dist;
351+
var len;
302352
var x0;
303353
var x;
304354
var y;
@@ -307,11 +357,15 @@ bench( pkg+':logpdf', function benchmark( b ) {
307357
x0 = 10.0;
308358
gamma = 6.0;
309359
dist = new Cauchy( x0, gamma );
360+
len = 100;
361+
x = new Float64Array( len );
362+
for ( i = 0; i < len; i++ ) {
363+
x[ i ] = uniform( 0.0, 1.0 );
364+
}
310365

311366
b.tic();
312367
for ( i = 0; i < b.iterations; i++ ) {
313-
x = randu();
314-
y = dist.logpdf( x );
368+
y = dist.logpdf( x[ i % len ] );
315369
if ( isnan( y ) ) {
316370
b.fail( 'should not return NaN' );
317371
}
@@ -327,6 +381,7 @@ bench( pkg+':logpdf', function benchmark( b ) {
327381
bench( pkg+':pdf', function benchmark( b ) {
328382
var gamma;
329383
var dist;
384+
var len;
330385
var x0;
331386
var x;
332387
var y;
@@ -335,11 +390,15 @@ bench( pkg+':pdf', function benchmark( b ) {
335390
x0 = 10.0;
336391
gamma = 6.0;
337392
dist = new Cauchy( x0, gamma );
393+
len = 100;
394+
x = new Float64Array( len );
395+
for ( i = 0; i < len; i++ ) {
396+
x[ i ] = uniform( 0.0, 1.0 );
397+
}
338398

339399
b.tic();
340400
for ( i = 0; i < b.iterations; i++ ) {
341-
x = randu();
342-
y = dist.pdf( x );
401+
y = dist.pdf( x[ i % len ] );
343402
if ( isnan( y ) ) {
344403
b.fail( 'should not return NaN' );
345404
}
@@ -355,6 +414,7 @@ bench( pkg+':pdf', function benchmark( b ) {
355414
bench( pkg+':quantile', function benchmark( b ) {
356415
var gamma;
357416
var dist;
417+
var len;
358418
var x0;
359419
var x;
360420
var y;
@@ -363,11 +423,15 @@ bench( pkg+':quantile', function benchmark( b ) {
363423
x0 = 10.0;
364424
gamma = 6.0;
365425
dist = new Cauchy( x0, gamma );
426+
len = 100;
427+
x = new Float64Array( len );
428+
for ( i = 0; i < len; i++ ) {
429+
x[ i ] = uniform( 0.0, 1.0 );
430+
}
366431

367432
b.tic();
368433
for ( i = 0; i < b.iterations; i++ ) {
369-
x = randu();
370-
y = dist.quantile( x );
434+
y = dist.quantile( x[ i % len ] );
371435
if ( isnan( y ) ) {
372436
b.fail( 'should not return NaN' );
373437
}

lib/node_modules/@stdlib/stats/base/dists/cauchy/entropy/benchmark/benchmark.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
var bench = require( '@stdlib/bench' );
2424
var Float64Array = require( '@stdlib/array/float64' );
25-
var randu = require( '@stdlib/random/base/randu' );
25+
var uniform = require( '@stdlib/random/base/uniform' );
2626
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2727
var EPS = require( '@stdlib/constants/float64/eps' );
2828
var pkg = require( './../package.json' ).name;
@@ -42,8 +42,8 @@ bench( pkg, function benchmark( b ) {
4242
gamma = new Float64Array( len );
4343
x0 = new Float64Array( len );
4444
for ( i = 0; i < len; i++ ) {
45-
x0[ i ] = ( randu()*100.0 ) - 50.0;
46-
gamma[ i ] = ( randu()*20.0 ) + EPS;
45+
x0[ i ] = uniform( -50.0, 50.0 );
46+
gamma[ i ] = uniform( EPS, 20.0 );
4747
}
4848

4949
b.tic();

0 commit comments

Comments
 (0)