@@ -30,8 +30,8 @@ var slice = Array.prototype.slice,
30
30
31
31
// global function
32
32
function jStat ( ) {
33
- return new jStat . fn . init ( slice . call ( arguments ) ) ;
34
- } ;
33
+ return new jStat . fn . init ( arguments ) ;
34
+ }
35
35
36
36
// extend jStat prototype
37
37
jStat . fn = jStat . prototype = {
@@ -63,7 +63,7 @@ jStat.fn = jStat.prototype = {
63
63
64
64
// return clean array
65
65
toArray : function ( ) {
66
- return slice . call ( this , 0 ) ;
66
+ return slice . call ( this ) ;
67
67
} ,
68
68
69
69
// only to be used internally
@@ -76,7 +76,7 @@ jStat.fn.init.prototype = jStat.fn;
76
76
// create method for easy extension
77
77
jStat . extend = function ( obj ) {
78
78
var args = slice . call ( arguments ) ,
79
- i = 1 , j ;
79
+ i = 1 , j ;
80
80
if ( args . length === 1 ) {
81
81
for ( i in obj ) {
82
82
jStat [ i ] = obj [ i ] ;
@@ -98,7 +98,6 @@ jStat.extend = function( obj ) {
98
98
var arr = [ ] ,
99
99
i = 0 ,
100
100
tmpthis ;
101
-
102
101
if ( this . length > 1 ) {
103
102
tmpthis = this . transpose ( ) ;
104
103
for ( ; i < tmpthis . length ; i ++ ) {
@@ -108,7 +107,6 @@ jStat.extend = function( obj ) {
108
107
arr = jStat [ passfunc ] ( arr ) ;
109
108
}
110
109
}
111
-
112
110
return arr . length > 1 ? jStat ( arr ) : jStat [ passfunc ] ( this [ 0 ] ) ;
113
111
} ;
114
112
} ) ( funcs [ i ] ) ;
@@ -156,17 +154,17 @@ jStat.extend( jStat.fn, {
156
154
157
155
// Returns a specified row as a vector
158
156
row : function ( index ) {
159
- return jStat ( this [ index ] ) ;
157
+ return jStat ( this [ index ] ) ;
160
158
} ,
161
159
162
160
// Returns the specified column as a vector
163
161
col : function ( index ) {
164
- var column = [ ] ,
162
+ var column = [ ] ,
165
163
i = 0 ;
166
- for ( ; i < this . length ; i ++ ) {
164
+ for ( ; i < this . length ; i ++ ) {
167
165
column [ i ] = [ this [ i ] [ index ] ] ;
168
- }
169
- return jStat ( column ) ;
166
+ }
167
+ return jStat ( column ) ;
170
168
} ,
171
169
172
170
// Returns the diagonal of the matrix
@@ -192,8 +190,8 @@ jStat.extend( jStat.fn, {
192
190
} ,
193
191
194
192
// map a function to a matrix or vector
195
- map : function ( func , toAlter ) {
196
- return jStat ( jStat . map ( this , func , toAlter ) ) ;
193
+ map : function ( func ) {
194
+ return jStat ( jStat . map ( this , func ) ) ;
197
195
} ,
198
196
199
197
// destructively alter an object
@@ -242,7 +240,7 @@ jStat.extend({
242
240
243
241
// generate a rows x cols matrix according to the supplied function
244
242
create : function ( rows , cols , func ) {
245
- var i , j , res = [ ] ;
243
+ var res = [ ] , i , j ;
246
244
for ( i = 0 ; i < rows ; i ++ ) {
247
245
res [ i ] = [ ] ;
248
246
for ( j = 0 ; j < cols ; j ++ ) {
@@ -275,30 +273,28 @@ jStat.extend({
275
273
// generate sequence
276
274
seq : function ( min , max , length , func ) {
277
275
var arr = [ ] ,
278
- hival = 1e15 ,
276
+ hival = 1e15 , // simple fix for IEEE floating point errors
279
277
step = ( max * hival - min * hival ) / ( ( length - 1 ) * hival ) ,
280
278
current = min ,
281
279
cnt = 0 ;
282
-
283
280
for ( ; current <= max ; cnt ++ , current = ( min * hival + step * hival * cnt ) / hival ) {
284
281
arr . push ( ( func ? func ( current ) : current ) ) ;
285
- } ;
286
-
282
+ }
287
283
return arr ;
288
284
} ,
289
285
290
286
// add a vector or scalar to the vector
291
287
add : function ( arr , arg ) {
292
- return isNaN ( arg )
293
- ? jStat . map ( arr , function ( value , row , col ) { return value + arg [ row ] [ col ] ; } )
294
- : jStat . map ( arr , function ( value ) { return value + arg ; } ) ;
288
+ return isNaN ( arg ) ?
289
+ jStat . map ( arr , function ( value , row , col ) { return value + arg [ row ] [ col ] ; } )
290
+ : jStat . map ( arr , function ( value ) { return value + arg ; } ) ;
295
291
} ,
296
292
297
293
// TODO: Implement matrix division
298
294
// matrix division
299
295
divide : function ( arr , arg ) {
300
- return isNaN ( arg )
301
- ? false
296
+ return isNaN ( arg ) ?
297
+ false
302
298
: jStat . map ( arr , function ( value ) { return value / arg ; } ) ;
303
299
} ,
304
300
@@ -326,8 +322,8 @@ jStat.extend({
326
322
327
323
// subtract a vector or scalar from the vector
328
324
subtract : function ( arr , arg ) {
329
- return isNaN ( arg )
330
- ? jStat . map ( arr , function ( value , row , col ) { return value - arg [ row ] [ col ] ; } )
325
+ return isNaN ( arg ) ?
326
+ jStat . map ( arr , function ( value , row , col ) { return value - arg [ row ] [ col ] ; } )
331
327
: jStat . map ( arr , function ( value ) { return value - arg ; } ) ;
332
328
} ,
333
329
@@ -373,12 +369,12 @@ jStat.extend({
373
369
// BUG: Does not work for matrices
374
370
// computes the norm of the vector
375
371
norm : function ( arr ) {
376
- arr = isArray ( arr [ 0 ] ) ? arr : [ arr ] ;
372
+ arr = isArray ( arr [ 0 ] ) ? arr : [ arr ] ;
377
373
if ( arr . length > 1 && arr [ 0 ] . length > 1 ) {
378
374
// matrix norm
379
375
} else {
380
376
// vector norm
381
- return Math . sqrt ( jStat . dot ( arr , arr ) ) ;
377
+ return Math . sqrt ( jStat . dot ( arr , arr ) ) ;
382
378
}
383
379
} ,
384
380
@@ -408,9 +404,7 @@ jStat.extend({
408
404
sum : function ( arr ) {
409
405
var sum = 0 ,
410
406
i = arr . length ;
411
- while ( -- i >= 0 ) {
412
- sum += arr [ i ] ;
413
- }
407
+ while ( -- i >= 0 ) sum += arr [ i ] ;
414
408
return sum ;
415
409
} ,
416
410
@@ -469,7 +463,6 @@ jStat.extend({
469
463
}
470
464
}
471
465
}
472
-
473
466
return ( numMaxCount === 0 ) ? maxNum : false ;
474
467
} ,
475
468
@@ -501,7 +494,7 @@ jStat.extend({
501
494
mean = jStat . mean ( arr ) ,
502
495
i = arr . length - 1 ;
503
496
for ( ; i >= 0 ; i -- ) {
504
- devSum += Math . abs ( arr [ i ] - mean ) ;
497
+ devSum += Math . abs ( arr [ i ] - mean ) ;
505
498
}
506
499
return devSum / arr . length ;
507
500
} ,
@@ -512,7 +505,7 @@ jStat.extend({
512
505
median = jStat . median ( arr ) ,
513
506
i = arr . length - 1 ;
514
507
for ( ; i >= 0 ; i -- ) {
515
- devSum += Math . abs ( arr [ i ] - median ) ;
508
+ devSum += Math . abs ( arr [ i ] - median ) ;
516
509
}
517
510
return devSum / arr . length ;
518
511
} ,
@@ -521,7 +514,11 @@ jStat.extend({
521
514
quartiles : function ( arr ) {
522
515
var arrlen = arr . length ,
523
516
_arr = arr . slice ( ) . sort ( ascNum ) ;
524
- return [ _arr [ Math . round ( ( arrlen ) / 4 ) - 1 ] , _arr [ Math . round ( ( arrlen ) / 2 ) - 1 ] , _arr [ Math . round ( ( arrlen ) * 3 / 4 ) - 1 ] ] ;
517
+ return [
518
+ _arr [ Math . round ( ( arrlen ) / 4 ) - 1 ] ,
519
+ _arr [ Math . round ( ( arrlen ) / 2 ) - 1 ] ,
520
+ _arr [ Math . round ( ( arrlen ) * 3 / 4 ) - 1 ]
521
+ ] ;
525
522
} ,
526
523
527
524
// covariance of two arrays
@@ -532,7 +529,7 @@ jStat.extend({
532
529
arr1Len = arr1 . length ,
533
530
i = 0 ;
534
531
for ( ; i < arr1Len ; i ++ ) {
535
- sq_dev [ i ] = ( arr1 [ i ] - u ) * ( arr2 [ i ] - v ) ;
532
+ sq_dev [ i ] = ( arr1 [ i ] - u ) * ( arr2 [ i ] - v ) ;
536
533
}
537
534
return jStat . sum ( sq_dev ) / arr1Len ;
538
535
} ,
0 commit comments