@@ -10,7 +10,14 @@ import {
10
10
checkRange ,
11
11
checkIndices
12
12
} from './util' ;
13
- import { sumByRow , sumByColumn , sumAll , productByRow , productByColumn , productAll } from './stat' ;
13
+ import {
14
+ sumByRow ,
15
+ sumByColumn ,
16
+ sumAll ,
17
+ productByRow ,
18
+ productByColumn ,
19
+ productAll
20
+ } from './stat' ;
14
21
import MatrixTransposeView from './views/transpose' ;
15
22
import MatrixRowView from './views/row' ;
16
23
import MatrixSubView from './views/sub' ;
@@ -1778,6 +1785,51 @@ export default function AbstractMatrix(superCtor) {
1778
1785
}
1779
1786
return 0 - sum ;
1780
1787
}
1788
+
1789
+ variance ( unbiased = true , means = this . mean ( 'column' ) ) {
1790
+ if ( typeof unbiased !== 'boolean' ) {
1791
+ throw new TypeError ( 'unbiased must be a boolean' ) ;
1792
+ }
1793
+ if ( ! Array . isArray ( means ) ) {
1794
+ throw new TypeError ( 'means must be an array' ) ;
1795
+ }
1796
+
1797
+ const rows = this . rows ;
1798
+ const cols = this . columns ;
1799
+ const variance = [ ] ;
1800
+
1801
+ for ( var j = 0 ; j < cols ; j ++ ) {
1802
+ var sum1 = 0 ;
1803
+ var sum2 = 0 ;
1804
+ var x = 0 ;
1805
+ for ( var i = 0 ; i < rows ; i ++ ) {
1806
+ x = this . get ( i , j ) - means [ j ] ;
1807
+ sum1 += x ;
1808
+ sum2 += x * x ;
1809
+ }
1810
+ if ( unbiased ) {
1811
+ variance . push ( ( sum2 - ( sum1 * sum1 ) / rows ) / ( rows - 1 ) ) ;
1812
+ } else {
1813
+ variance . push ( ( sum2 - ( sum1 * sum1 ) / rows ) / rows ) ;
1814
+ }
1815
+ }
1816
+ return variance ;
1817
+ }
1818
+
1819
+ standardDeviation ( unbiased = true , means = this . mean ( 'column' ) ) {
1820
+ if ( typeof unbiased !== 'boolean' ) {
1821
+ throw new TypeError ( 'unbiased must be a boolean' ) ;
1822
+ }
1823
+ if ( ! Array . isArray ( means ) ) {
1824
+ throw new TypeError ( 'means must be an array' ) ;
1825
+ }
1826
+
1827
+ const variance = this . variance ( means , unbiased ) ;
1828
+ for ( var i = 0 ; i < variance . length ; i ++ ) {
1829
+ variance [ i ] = Math . sqrt ( variance [ i ] ) ;
1830
+ }
1831
+ return variance ;
1832
+ }
1781
1833
}
1782
1834
1783
1835
Matrix . prototype . klass = 'Matrix' ;
0 commit comments