@@ -61,13 +61,16 @@ jStat.fn = jStat.prototype = {
61
61
for ( var i = 0 ; i < args [ 0 ] . length ; i ++ ) {
62
62
this [ i ] = args [ 0 ] [ i ] ;
63
63
}
64
+ this . length = args [ 0 ] . length ;
64
65
} else {
65
66
this [ 0 ] = args [ 0 ] ;
67
+ this . length = 1 ;
66
68
}
67
69
68
70
// if first argument is number, assume creation of sequence
69
71
} else if ( ! isNaN ( args [ 0 ] ) ) {
70
72
this [ 0 ] = jStat . seq . apply ( null , args ) ;
73
+ this . length = 1 ;
71
74
}
72
75
return this ;
73
76
} ,
@@ -77,7 +80,7 @@ jStat.fn = jStat.prototype = {
77
80
78
81
// return clean array
79
82
toArray : function ( ) {
80
- return slice . call ( this , 0 ) ;
83
+ return slice . call ( this ) ;
81
84
} ,
82
85
83
86
// only to be used internally
@@ -112,7 +115,6 @@ jStat.extend = function( obj ) {
112
115
var arr = [ ] ,
113
116
i = 0 ,
114
117
tmpthis ;
115
-
116
118
if ( this . length > 1 ) {
117
119
tmpthis = this . transpose ( ) ;
118
120
for ( ; i < tmpthis . length ; i ++ ) {
@@ -122,7 +124,6 @@ jStat.extend = function( obj ) {
122
124
arr = jStat [ passfunc ] ( arr ) ;
123
125
}
124
126
}
125
-
126
127
return arr . length > 1 ? jStat ( arr ) : jStat [ passfunc ] ( this [ 0 ] ) ;
127
128
} ;
128
129
} ) ( funcs [ i ] ) ;
@@ -170,17 +171,17 @@ jStat.extend( jStat.fn, {
170
171
171
172
// Returns a specified row as a vector
172
173
row : function ( index ) {
173
- return jStat ( this [ index ] ) ;
174
+ return jStat ( this [ index ] ) ;
174
175
} ,
175
176
176
177
// Returns the specified column as a vector
177
178
col : function ( index ) {
178
- var column = [ ] ,
179
+ var column = [ ] ,
179
180
i = 0 ;
180
- for ( ; i < this . length ; i ++ ) {
181
+ for ( ; i < this . length ; i ++ ) {
181
182
column [ i ] = [ this [ i ] [ index ] ] ;
182
- }
183
- return jStat ( column ) ;
183
+ }
184
+ return jStat ( column ) ;
184
185
} ,
185
186
186
187
// Returns the diagonal of the matrix
@@ -206,8 +207,8 @@ jStat.extend( jStat.fn, {
206
207
} ,
207
208
208
209
// map a function to a matrix or vector
209
- map : function ( func , toAlter ) {
210
- return jStat ( jStat . map ( this , func , toAlter ) ) ;
210
+ map : function ( func ) {
211
+ return jStat ( jStat . map ( this , func ) ) ;
211
212
} ,
212
213
213
214
// destructively alter an object
@@ -256,7 +257,7 @@ jStat.extend({
256
257
257
258
// generate a rows x cols matrix according to the supplied function
258
259
create : function ( rows , cols , func ) {
259
- var i , j , res = [ ] ;
260
+ var res = [ ] , i , j ;
260
261
for ( i = 0 ; i < rows ; i ++ ) {
261
262
res [ i ] = [ ] ;
262
263
for ( j = 0 ; j < cols ; j ++ ) {
@@ -289,30 +290,28 @@ jStat.extend({
289
290
// generate sequence
290
291
seq : function ( min , max , length , func ) {
291
292
var arr = [ ] ,
292
- hival = 1e15 ,
293
+ hival = 1e15 , // simple fix for IEEE floating point errors
293
294
step = ( max * hival - min * hival ) / ( ( length - 1 ) * hival ) ,
294
295
current = min ,
295
296
cnt = 0 ;
296
-
297
297
for ( ; current <= max ; cnt ++ , current = ( min * hival + step * hival * cnt ) / hival ) {
298
298
arr . push ( ( func ? func ( current ) : current ) ) ;
299
- } ;
300
-
299
+ }
301
300
return arr ;
302
301
} ,
303
302
304
303
// add a vector or scalar to the vector
305
304
add : function ( arr , arg ) {
306
- return isNaN ( arg )
307
- ? jStat . map ( arr , function ( value , row , col ) { return value + arg [ row ] [ col ] ; } )
308
- : jStat . map ( arr , function ( value ) { return value + arg ; } ) ;
305
+ return isNaN ( arg ) ?
306
+ jStat . map ( arr , function ( value , row , col ) { return value + arg [ row ] [ col ] ; } )
307
+ : jStat . map ( arr , function ( value ) { return value + arg ; } ) ;
309
308
} ,
310
309
311
310
// TODO: Implement matrix division
312
311
// matrix division
313
312
divide : function ( arr , arg ) {
314
- return isNaN ( arg )
315
- ? false
313
+ return isNaN ( arg ) ?
314
+ false
316
315
: jStat . map ( arr , function ( value ) { return value / arg ; } ) ;
317
316
} ,
318
317
@@ -340,8 +339,8 @@ jStat.extend({
340
339
341
340
// subtract a vector or scalar from the vector
342
341
subtract : function ( arr , arg ) {
343
- return isNaN ( arg )
344
- ? jStat . map ( arr , function ( value , row , col ) { return value - arg [ row ] [ col ] ; } )
342
+ return isNaN ( arg ) ?
343
+ jStat . map ( arr , function ( value , row , col ) { return value - arg [ row ] [ col ] ; } )
345
344
: jStat . map ( arr , function ( value ) { return value - arg ; } ) ;
346
345
} ,
347
346
@@ -387,12 +386,12 @@ jStat.extend({
387
386
// BUG: Does not work for matrices
388
387
// computes the norm of the vector
389
388
norm : function ( arr ) {
390
- arr = isArray ( arr [ 0 ] ) ? arr : [ arr ] ;
389
+ arr = isArray ( arr [ 0 ] ) ? arr : [ arr ] ;
391
390
if ( arr . length > 1 && arr [ 0 ] . length > 1 ) {
392
391
// matrix norm
393
392
} else {
394
393
// vector norm
395
- return Math . sqrt ( jStat . dot ( arr , arr ) ) ;
394
+ return Math . sqrt ( jStat . dot ( arr , arr ) ) ;
396
395
}
397
396
} ,
398
397
@@ -422,9 +421,7 @@ jStat.extend({
422
421
sum : function ( arr ) {
423
422
var sum = 0 ,
424
423
i = arr . length ;
425
- while ( -- i >= 0 ) {
426
- sum += arr [ i ] ;
427
- }
424
+ while ( -- i >= 0 ) sum += arr [ i ] ;
428
425
return sum ;
429
426
} ,
430
427
@@ -483,7 +480,6 @@ jStat.extend({
483
480
}
484
481
}
485
482
}
486
-
487
483
return ( numMaxCount === 0 ) ? maxNum : false ;
488
484
} ,
489
485
@@ -515,7 +511,7 @@ jStat.extend({
515
511
mean = jStat . mean ( arr ) ,
516
512
i = arr . length - 1 ;
517
513
for ( ; i >= 0 ; i -- ) {
518
- devSum += Math . abs ( arr [ i ] - mean ) ;
514
+ devSum += Math . abs ( arr [ i ] - mean ) ;
519
515
}
520
516
return devSum / arr . length ;
521
517
} ,
@@ -526,7 +522,7 @@ jStat.extend({
526
522
median = jStat . median ( arr ) ,
527
523
i = arr . length - 1 ;
528
524
for ( ; i >= 0 ; i -- ) {
529
- devSum += Math . abs ( arr [ i ] - median ) ;
525
+ devSum += Math . abs ( arr [ i ] - median ) ;
530
526
}
531
527
return devSum / arr . length ;
532
528
} ,
@@ -535,7 +531,11 @@ jStat.extend({
535
531
quartiles : function ( arr ) {
536
532
var arrlen = arr . length ,
537
533
_arr = arr . slice ( ) . sort ( ascNum ) ;
538
- return [ _arr [ Math . round ( ( arrlen ) / 4 ) - 1 ] , _arr [ Math . round ( ( arrlen ) / 2 ) - 1 ] , _arr [ Math . round ( ( arrlen ) * 3 / 4 ) - 1 ] ] ;
534
+ return [
535
+ _arr [ Math . round ( ( arrlen ) / 4 ) - 1 ] ,
536
+ _arr [ Math . round ( ( arrlen ) / 2 ) - 1 ] ,
537
+ _arr [ Math . round ( ( arrlen ) * 3 / 4 ) - 1 ]
538
+ ] ;
539
539
} ,
540
540
541
541
// covariance of two arrays
@@ -546,7 +546,7 @@ jStat.extend({
546
546
arr1Len = arr1 . length ,
547
547
i = 0 ;
548
548
for ( ; i < arr1Len ; i ++ ) {
549
- sq_dev [ i ] = ( arr1 [ i ] - u ) * ( arr2 [ i ] - v ) ;
549
+ sq_dev [ i ] = ( arr1 [ i ] - u ) * ( arr2 [ i ] - v ) ;
550
550
}
551
551
return jStat . sum ( sq_dev ) / arr1Len ;
552
552
} ,
0 commit comments