# How to calculate the harmonic mean

The harmonic mean is another kind of average value for a discrete data set. To calculate the harmonic mean of a set of N data values we need to divide the number of data values N to the sum of inverses of each data value.

In mathematics there is no particular notation for the harmonic mean. For our example we are going to use:

$x_{HM}=\frac {N}{{\frac {1}{x_{1}}}+{\frac {1}{x_{2}}}+\cdots +{\frac {1}{x_{N}}}}$

The general mathematic formula for the harmonic mean is:

$x_{HM}=\frac {N}{\sum \limits _{i=1}^{N}{\frac {1}{x_{i}}}}$

We can also write the mathematical expression of the harmonic mean using rational exponents:

$x_{HM}=\left(\frac {\sum \limits _{i=1}^{N}x_{i}^{-1}}{N}\right)^{-1}$

Example: Calculate the harmonic mean (average) of the monthly minimum temperature for the given set of data.

 Month Minimum temperature [°C] January 2 February 4 March 8 April 13 May 16 June 21 July 23 August 22 September 20 October 17 November 13 December 6

We are given 12 measurements of the temperatures, the minimum value for each month. The minimum average temperature for the whole year is the harmonic mean of the data set:

$x_{HM}=\frac {12}{\frac {1}{2}+\frac {1}{4}+\frac {1}{8}+\frac {1}{13}+\frac {1}{16}+\frac {1}{21}+\frac {1}{23}+\frac {1}{22}+\frac {1}{20}+\frac {1}{17}+\frac {1}{13}+\frac {1}{6}}=7.981970$

For a better understanding of the result we are going to plot:

• each monthly minimum temperature as a bar plot
• the harmonic mean (yearly minimum average temperature) as a line

Image: Monthly minimum temperature and yearly average (harmonic mean)

As a programming exercise, we’ll write a Scilab script which calculates the harmonic mean for the same set of data:

data_N = [2 4 8 13 16 21 23 22 20 17 13 6];
length_N = length(data_N);
sum_inv_N = 0;

for i=1:length_N
sum_inv_N = sum_inv_N + 1/data_N(i);
end

x_HM = length_N/sum_inv_N;
mprintf("The harmonic mean is: %f", x_HM);

For further practicing we are going to write down a C script which calculates the harmonic mean for the same set of data (temperatures):

#include<stdio.h>
#include<math.h>

int main(void)
{
double data_N[12] = {2,4,8,13,16,21,23,22,20,17,13,6};
int i;
double sum_inv_N = 0;
double x_HM = 0;
double length_N = 12;

for (i=0;i<length_N;i++){
sum_inv_N = sum_inv_N + 1/data_N[i];
}

x_HM = length_N / sum_inv_N;
printf("The harmonic mean is %f: \n",x_HM);

return 0;

}

For any questions or observations regarding this tutorial please use the comment form below.

Don’t forget to Like, Share and Subscribe!