This library provides a collection of math and statistics classes and cmdlets for PowerShell. It is built on top of Accord.NET.
This is a work in progress but already usable for many use cases.
The library is published in PowerShell Gallery
Install-Module psmathEach cmdlet in the library comes along with a short alias prefixed with math. or st. and you can use it instead of the full cmdlet name. For example, you can use math.sin instead of Get-Math.Sin.
PS C:\> math.sin (3 / 4 * (math.pi))
0.707106781186548
PS C:\> 1..5 | math.sqrt
1
1.4142135623731
1.73205080756888
2
2.236067977499791
PS C:\> 1..99 | math.median
50
PS C:\> 1..99 | math.var -Unbiased
825
PS C:\> 1..99 | math.summary
Name :
Count : 99
Unique : 99
Minimum : 1
LowerQuantile : 25
Median : 50
Mean : 50
UpperQuantile : 75
Maximum : 99Cmdlets: math.abs math.acos math.argmax math.argmin math.argsort math.asin math.atan math.atan2 math.binomial math.ceiling math.center math.choose math.contraharmonicmean math.cos math.cosh math.cumsum math.diff math.distinct math.distinctCount math.divrem math.e math.entropy math.ewmean math.ewvar math.exp math.factorial math.floor math.geometric math.hist math.issorted math.kalman math.kurtosis math.log math.log10 math.loggeometric math.lowerq math.max math.mean math.median math.min math.mode math.movingmean math.movingmmax math.movingmmin math.movingstdev math.movingsum math.movingvar math.normalize math.pi math.pow math.quantile math.randomseed math.rank math.rem math.reverse math.round math.sample math.scale math.se math.shuffle math.sigmoid math.sign math.sin math.sinh math.skewness math.softmax math.sqrt math.standardize math.stdev math.sum math.summary math.tan math.tanh math.ties math.truncate math.truncatedmean math.truthtable math.upperq math.var math.zscore
Sequence generators similar to NumPy's arange and linspace.
PS C:\> seq 0 5 1.5
0
1.5
3
4.5
PS C:\> $seq = seq.linspace 1 60
PS C:\> $seq -join "`t"
0 0.0166666666666667 0.0333333333333333 0.05 0.0666666666666667 0.0833333333333333
0.1 0.116666666666667 0.133333333333333 0.15 0.166666666666667 0.183333333333333
0.2 0.216666666666667 0.233333333333333 0.25 0.266666666666667 0.283333333333333
0.3 0.316666666666667 0.333333333333333 0.35 0.366666666666667 0.383333333333333
0.4 0.416666666666667 0.433333333333333 0.45 0.466666666666667 0.483333333333333
0.5 0.516666666666667 0.533333333333333 0.55 0.566666666666667 0.583333333333333
0.6 0.616666666666667 0.633333333333333 0.65 0.666666666666667 0.683333333333333
0.7 0.716666666666667 0.733333333333333 0.75 0.766666666666667 0.783333333333333
0.8 0.816666666666667 0.833333333333333 0.85 0.866666666666667 0.883333333333333
0.9 0.916666666666667 0.933333333333333 0.95 0.966666666666667 0.983333333333333
PS C:\> seq 10 20 2 -func { $x * $x }, { math.sqrt $x }
x y0 y1
- -- --
10 100 3.16227766016838
12 144 3.46410161513775
14 196 3.74165738677394
16 256 4
18 324 4.24264068711928
Cmdlets: seq seq.linspace seq.values seq.zeros
The methods of System.Linq.Enumerable and Accord.NET classes are defined in the Array class.
PS C:\> (0..99).Mean()
49.5
PS C:\> "A quick brown fox jumps over the lazy dog".Split().Aggregate({ $args[1] + " - " + $args[0] })
dog - lazy - the - over - jumps - fox - brown - quick - AMethods: Aggregate All Any ArgMin ArgSort AsEnumerable Bottom Cartesian Center Clear Concat Concatenate Contains ContraHarmonicMean Copy Cross CumulativeSum DefaultIfEmpty Distinct DistinctCount DropNa DropNaN ElementAt ElementAtOrDefault Entropy Except Expand ExponentialWeightedMean ExponentialWeightedVariance Find First FirstOrDefault GeometricMean Get GroupBy GroupJoin HasInfinity HasNaN Intersect IsEqual IsSorted Join Kronecker Kurtosis Last LastOrDefault LogGeometricMean LongCount LowerQuartile Max Mean Median Min Mode Normalize Null OrderBy OrderByDescending Outer Product Quantile Quantiles Quartiles Rank Reverse Sample Scale Select SelectMany SequenceEqual Shuffled Single SingleOrDefault Skewness Skip SkipWhile Sorted Split Stack StandardDeviation StandardError Standardize Stdev Sum Swap Take TakeWhile Ties ToDictionary ToList ToLookup Top Trim TruncatedMean Union UpperQuartile Var Variance Where Zip
The Matrix class represents a matrix and offers a reasonable output format and useful methods. You can create Matrix objects by the mat cmdlet (New-Math.Matrix) and variants (mat.identity, mat.diagonal and so on).
PS C:\> $m = mat 1,2,3,4 3 3
PS C:\> $m
[3 x 3]
1 4 3
2 1 4
3 2 1
PS C:\> $m.Inv
[3 x 3]
-0.19444 0.05556 0.36111
0.27778 -0.22222 0.05556
0.02778 0.27778 -0.19444
PS C:\> $svd = $m.Svd()
PS C:\> $svd | fl
U : [3 x 3] [ 0.67552 0.56617 -0.47235 ] [ 0.58632 -0.80092 -0.12149 ] [ 0.4471 0.19488 0.873 ]
D : [3 x 3] [ 7.13366 0 0 ] [ 0 2.31427 0 ] [ 0 0 2.1806 ]
V : [3 x 3] [ 0.4471 -0.19488 0.873 ] [ 0.58632 0.80092 -0.12149 ] [ 0.67552 -0.56617 -0.47235 ]
Source : Accord.Math.Decompositions.SingularValueDecomposition
PS C:\> $svd.U * $svd.D * $svd.V.T
[3 x 3]
1 4 3
2 1 4
3 2 1Cmdlets: mat.diagonal mat.fromobject mat.identity mat.magic mat.mesh mat.meshgrid mat.onehot mat.truthtable mat.zeros
Methods and properties: Abs Add Apply ApplyInPlace ArgMax ArgMin ArgSort AsString Bottom Cartesian Ceiling Cholesky Clone Combinations Concatenate Convolve Correlation Count Covariance Cross CumulativeSum Decompose Determinant Distinct DistinctCount Divide DivideByDiagonal Dot Eigenvalue Entropy Equals Exp Expand ExponentialWeightedCovariance Find First FirstOrNull Flatten Floor GetColumn GetColumns GetHashCode GetLowerTriangle GetNumberOfElements GetRange GetRow GetRows GetSymmetric GetTotalLength GetType GetUpperTriangle gramSchmidtOrthogonalizationWrapper HasInfinity HasNaN Inverse IsDiagonal IsLowerTriangular IsPositiveDefinite IsSingular IsSymmetric IsUpperTriangular Kronecker Last Log LogDeterminant LogPseudoDeterminant Lu Max Mean Median Merge Min Mode Multiply Nmf Normalize Null OneHot Outer Pad Permutations Pow Product PseudoDeterminant Qr Rank Reversed Round Shuffle Sign SignedPow SignSqrt Skewness Solve Sort Split Sqrt Stack StanardDeviation StanardError Subsets Subtract Sum Svd ToFlatArray ToJagged Top ToPSObject ToString Trace Transpose Variance WeightedCovariance Whitening ZScores Item Columns Inv Rows T Values
PS C:\> $n = st.normal -Mean 10 -StdDev 3
PS C:\> $n
Mean : 10
Median : 10
Variance : 9
StandardDeviation : 3
Mode : 10
Skewness : 0
Kurtosis : 0
Support : [-∞, ∞]
Entropy : 2.51755082187278
Quartiles : [7.97653074941176, 12.0234692505882]
PS C:\> $n.Generate(3)
6.70926907721133
7.16162377748582
15.2954486068024
PS C:\> seq 7 13 .01 -func { $n.pdf($x) }
x y0
- --
7 0.0806569081730478
7.01 0.0809257635370322
7.02 0.0811946129148634
7.03 0.0814634503023332
7.04 0.0817322696757198
:Cmdlets: st.bernoulli st.beta st.binomial st.cauchy st.chisquire st.empirical st.exponential st.f st.gamma st.geometric st.hypergeo st.logistic st.lognormal st.negbinomial st.normal st.poison st.t st.uniform st.uniformd st.weibull
PS C:\> $samples = (st.normal 10 9).generate(20)
PS C:\> $samples | Invoke-TTest -HypothesizedMean 0 -Alternate Different
Analysis : 0.999782277992546
StandardError : 1.98120573653148
EstimatedValue : 11.4688217870095
HypothesizedValue : 0
Confidence : [7.3221105237174, 15.6155330503016]
Hypothesis : ValueIsDifferentFromHypothesis
StatisticDistribution : T(x; df = 19)
PValue : 1.40972806286221E-05
Statistic : 5.78880909515642
Tail : TwoTail
Size : 0.05
Significant : True
CriticalValue : 2.09302405440831Cmdlets: Invoke-BinomialTest Invoke-ChiSquareTest Invoke-FisherExactTest Invoke-FTest Invoke-KolmogorovSmirnovTest Invoke-LeveneTest Invoke-MannWhitneyWilcoxonTest Invoke-PairedTTest Invoke-ShapiroWilkTest Invoke-SignTest Invoke-TTest Invoke-TwoSampleKolmogorovSmirnovTest Invoke-TwoSampleSignTest Invoke-TwoSampleTTest Invoke-TwoSampleWilcoxonSignedRankTest Invoke-WilcoxonSignedRankTest
(particularly WIP)
PS C:\> $samples = seq 0 10 1 -func { 2 * $x + (st.normal).generate() + 10 }
PS C:\> $samples
x y0
- --
0 12.4668147765386
1 12.3778237651562
2 13.5261567687156
3 16.6537265658641
4 19.4478735361853
5 21.6786215694439
6 20.8376203580729
7 24.4205486696051
8 25.2553007079806
9 26.5474208799279
PS C:\> $r = $samples | Invoke-LinearRegression -OutputName y0
PS C:\> $r.Regression.ToString()
y(x0) = 3.55268307161757*x0
PS C:\> $r.RSquareAdjusted
-0.719608861231189Cmdlets: Invoke-GeneralizedLinearRegression Invoke-LinearRegression Invoke-LogisticRegression Invoke-StepwiseLogisticRegression
Flexible type conversion cmdlets.
PS C:\> math.todouble '$3.99', '1,000,000', '3e-4'
3.99
1000000
0.0003
PS C:\> math.todatetime 1998/3/7, Aug-7, "Sunday, May 7, 2017"
3/7/1998 12:00:00 AM
8/7/2018 12:00:00 AM
5/7/2017 12:00:00 AMCmdlets: math.fromunixtime math.todatetime math.todatetimeoffset math.todouble math.tounixtime
This library is licensed under the GNU Lesser General Public License version 2.1 or later.