@@ -108,23 +108,24 @@ func printJSON<T: Encodable>(_ value: T) {
108
108
109
109
/// Statistics-related helpers.
110
110
extension Array where Element == Double {
111
- /// Average value across all elements of the array .
111
+ /// The average value of elements .
112
112
var average : Element {
113
- guard self . count > 0 else { return 0.0 }
114
- guard self . count > 1 else { return self . first! }
113
+ guard count > 0 else { return 0 }
114
+ guard count > 1 else { return first! }
115
+ return ( reduce ( into: 0 ) { $0 += $1 } ) / Double( count)
116
+ }
115
117
116
- return ( self . reduce ( 0.0 ) { $0 + $1 } ) / Double( self . count)
118
+ /// The variance of elements.
119
+ var variance : Element {
120
+ guard count > 0 else { return 0 }
121
+ guard count > 1 else { return 0 }
122
+ let deltaDegreesOfFreedom = 1
123
+ let squaredDeviationsSum = reduce ( into: 0 ) { $0 += ( $1 - average) * ( $1 - average) }
124
+ return squaredDeviationsSum / Double( count - deltaDegreesOfFreedom)
117
125
}
118
126
119
- /// Standard deviation of elements within the array.
127
+ /// The standard deviation of elements.
120
128
var standardDeviation : Element {
121
- guard self . count > 0 else { return 0.0 }
122
- guard self . count > 1 else { return 0.0 }
123
-
124
- let average = self . average
125
-
126
- return Foundation . sqrt (
127
- self . reduce ( 0.0 ) { $0 + ( $1 - average) * ( $1 - average) }
128
- / Double( self . count - 1 ) )
129
+ return Double . sqrt ( variance)
129
130
}
130
131
}
0 commit comments