This language bar is your friend. Select your favorite languages!

Idiom #203 Calculate mean and standarddeviation

Calculate the mean m and the standard deviation s of the list of floating point values data.

import statistics
m = statistics.mean(data)
sd = statistics.stdev(data)
defmodule SD do
  import Enum, only: [map: 2, sum: 1]
  import :math, only: [sqrt: 1, pow: 2]

  def standard_deviation(data) do
    m = mean(data)
    data |> variance(m) |> mean |> sqrt
  end

  def mean(data) do
    sum(data) / length(data)
  end

  def variance(data, mean) do
    for n <- data, do: pow(n - mean, 2)
  end
end

# usage
data = [1,2,3,4]
m = SD.mean(data) # => 2.5
sd = SD.standard_deviation(data) # => 1.118033988749895






real, allocatable :: data(:)
real :: m, s
...
m = sum( data ) / size( data )
s = sqrt( sum( data**2 ) / size( data ) - m**2 )
math
var
  m, s: double;
  data: array of double;
...
  MeanAndStdDev(data, m, s);
...
use Statistics::Lite qw(mean stddev);
my $m = mean @data;
my $s = stddev @data;
m  = data.sum / data.length.to_f
sd = Math.sqrt data.sum { |n| (m-n)**2 } / data.length.to_f 

Do you know the best way to do this in your language ?
New implementation...

Idiom created by

Bart