# Calculate the standard deviation of a Ruby array

Standard deviation is a measure of the amount of variance within a group of values. A high value indicates a wide spread of values around the mean, whereas a low value indicates tight clustering of values.

The calculation gives additional context to the range of values around the mean value of a series of data. Wikipedia has some good examples of real-world applications.

Ruby doesn’t provide a native method to generate the standard deviation of an array of integers. Its built-in `Math`

library focuses on trigonometry and logarithmic calculations. This isn’t surprising given there’s not even a way to calculate the mean of an array in Ruby.

## Ensure you use…

…`Array#sum`

when calculating both the mean and the standard deviation from an array of integers:

```
a = [1, 2, 3, 4, 5, 6, 7, 8]
mean = a.sum(0.0) / a.size
#=> 4.5
sum = a.sum(0.0) { |element| (element - mean) ** 2 }
#=> 42.0
variance = sum / (a.size - 1)
#=> 6.0
standard_deviation = Math.sqrt(variance)
#=> 2.449489742783178
```

## Why?

Using the `#sum`

method from `Array`

is many, many times faster than using the alternative, `inject`

.

The `#sum`

method was only added to `Array`

in Ruby 2.4, which is why you might see alternative implementations in other places on the Internet.

I compared the performance of Ruby-native vs. implementing the algorithms yourself when I wrote about calculating the mean and the same principles apply: native implementations (in C) are much faster.

## Anything else?

In all honesty, if you’re doing a lot of statistical number-crunching work you probably want to reach a little closer to “the metal”.

A version of the standard deviation calculation done in Ruby is much slower than if it were done natively in C.

If you’re doing a lot of this sort of calculation or in a situation where performance is key you might want to look at the `enumerable-statistics`

gem. It has natively implemented versions of several statistical summary methods mixed in directly to Ruby’s `Array`

and `Enumerable`

classes.

last updated on 28 Jun 2021 by @andycroll

photo by

Ray Reyes

Don’t miss my next post, sign up to the One Ruby Thing email and get my next post in your inbox.

Don’t miss my next post, sign up to the One Ruby Thing email and get my next post in your inbox.