Program for Variance and Standard Deviation of an array
Last Updated :
07 Nov, 2023
Given an array, we need to calculate the variance and standard deviation of the elements of the array.
Examples :
Input : arr[] = [1, 2, 3, 4, 5]
Output : Variance = 2
Standard Deviation = 1
Input : arr[] = [7, 7, 8, 8, 3]
Output : Variance = 3
Standard Deviation = 1
We have discussed program to find mean of an array.
Mean is average of element.
Mean of arr[0..n-1] = ?(arr[i]) / n
where 0 <= i < n
Variance is sum of squared differences from the mean divided by number of elements.
Variance = ?(arr[i] – mean)2 / n
Standard Deviation is square root of variance
Standard Deviation = ?(variance)
Please refer Mean, Variance and Standard Deviation for details.
Below is the implementation of above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int variance( int a[], int n)
{
int sum = 0;
for ( int i = 0; i < n; i++)
sum += a[i];
double mean = ( double )sum /
( double )n;
double sqDiff = 0;
for ( int i = 0; i < n; i++)
sqDiff += (a[i] - mean) *
(a[i] - mean);
return sqDiff / n;
}
double standardDeviation( int arr[],
int n)
{
return sqrt (variance(arr, n));
}
int main()
{
int arr[] = {600, 470, 170, 430, 300};
int n = sizeof (arr) / sizeof (arr[0]);
cout << "Variance: "
<< variance(arr, n) << "\n" ;
cout << "Standard Deviation: "
<< standardDeviation(arr, n) << "\n" ;
return 0;
}
|
Java
import java.io.*;
class GFG
{
static double variance( double a[],
int n)
{
double sum = 0 ;
for ( int i = 0 ; i < n; i++)
sum += a[i];
double mean = ( double )sum /
( double )n;
double sqDiff = 0 ;
for ( int i = 0 ; i < n; i++)
sqDiff += (a[i] - mean) *
(a[i] - mean);
return ( double )sqDiff / n;
}
static double standardDeviation( double arr[],
int n)
{
return Math.sqrt(variance(arr, n));
}
public static void main (String[] args)
{
double arr[] = { 600 , 470 , 170 , 430 , 300 };
int n = arr.length;
System.out.println( "Variance: " +
variance(arr, n));
System.out.println ( "Standard Deviation: " +
standardDeviation(arr, n));
}
}
|
Python 3
import math
def variance(a, n):
sum = 0
for i in range ( 0 ,n):
sum + = a[i]
mean = sum / n
sqDiff = 0
for i in range ( 0 ,n):
sqDiff + = ((a[i] - mean)
* (a[i] - mean))
return sqDiff / n
def standardDeviation(arr, n):
return math.sqrt(variance(arr, n))
arr = [ 600 , 470 , 170 , 430 , 300 ]
n = len (arr)
print ( "Variance: " , int (variance(arr, n)))
print ( "Standard Deviation: " ,
round (standardDeviation(arr, n), 3 ))
|
C#
using System;
class GFG
{
static float variance( double []a,
int n)
{
double sum = 0;
for ( int i = 0; i < n; i++)
sum += a[i];
double mean = ( double )sum /
( double )n;
double sqDiff = 0;
for ( int i = 0; i < n; i++)
sqDiff += (a[i] - mean) *
(a[i] - mean);
return ( float )sqDiff / n;
}
static float standardDeviation( double []arr,
int n)
{
return ( float )Math.Sqrt(variance(arr, n));
}
public static void Main ()
{
double []arr = {600, 470, 170, 430, 300};
int n = arr.Length;
Console.WriteLine( "Variance: " +
variance(arr, n));
Console.WriteLine ( "Standard Deviation: " +
standardDeviation(arr, n));
}
}
|
Javascript
<script>
function variance(a, n)
{
var sum = 0;
for ( var i = 0; i < n; i++){
sum += a[i];
}
var mean = sum / n;
var sqDiff = 0;
for ( var i = 0; i < n; i++) {
sqDiff += (a[i] - mean) * (a[i] - mean);
}
return sqDiff / n;
}
function standardDeviation(arr , n)
{
return Math.sqrt(variance(arr, n));
}
var arr = [600, 470, 170, 430, 300]
var n = arr.length;
document.write( "Variance: " +
variance(arr, n) + "<br>" );
document.write ( "Standard Deviation: " +
standardDeviation(arr, n).toFixed(3));
</script>
|
PHP
<?php
function variance( $a , $n )
{
$sum = 0;
for ( $i = 0; $i < $n ; $i ++)
$sum += $a [ $i ];
$mean = $sum / $n ;
$sqDiff = 0;
for ( $i = 0; $i < $n ; $i ++)
$sqDiff += ( $a [ $i ] - $mean ) *
( $a [ $i ] - $mean );
return $sqDiff / $n ;
}
function standardDeviation( $arr , $n )
{
return sqrt(variance( $arr , $n ));
}
$arr = array (600, 470, 170, 430, 300);
$n = count ( $arr );
echo "Variance: " ,
variance( $arr , $n ) , "\n" ;
echo "Standard Deviation: " ,
standardDeviation( $arr , $n ) , "\n" ;
?>
|
Output
Variance: 21704
Standard Deviation: 147.323
Time complexity: O(n)
Auxiliary Space: O(1)
Approach#2: Using sum()
This approach calculates the mean, variance, and standard deviation of the input array without using any external library. It first calculates the mean of the array by dividing the sum of the elements by the number of elements in the array. Then, it calculates the variance by iterating over each element of the array, subtracting the mean from it, squaring the result, and summing up all the squares. Finally, it calculates the standard deviation by taking the square root of the variance.
Algorithm
1. Calculate the mean of the array by dividing the sum of the elements by the number of elements in the array.
2. Calculate the variance by iterating over each element of the array:
a. Subtract the mean from the element.
b. Square the result of step (2a).
c. Sum up all the squares obtained in step (2b).
d. Divide the sum obtained in step (2c) by the number of elements in the array.
3. Calculate the standard deviation by taking the square root of the variance.
4. Print the variance and standard deviation.
C++
#include <bits/stdc++.h>
using namespace std;
void calculateStats( const vector< int >& arr) {
int n = arr.size();
int sum = 0;
for ( int i = 0; i < n; i++) {
sum += arr[i];
}
double mean = static_cast < double >(sum) / n;
double variance = 0;
for ( int i = 0; i < n; i++) {
variance += pow (arr[i] - mean, 2);
}
variance /= n;
double std_deviation = sqrt (variance);
cout << "Variance = " << static_cast < int >(variance) << endl;
cout << "Standard Deviation = " << static_cast < int >(std_deviation) << endl;
}
int main() {
vector< int > arr = { 7, 7, 8, 8, 3 };
calculateStats(arr);
return 0;
}
|
Java
import java.util.ArrayList;
import java.util.List;
public class GFG {
public static void calculateStats(List<Integer> arr) {
int n = arr.size();
int sum = 0 ;
for ( int i = 0 ; i < n; i++) {
sum += arr.get(i);
}
double mean = ( double ) sum / n;
double variance = 0 ;
for ( int i = 0 ; i < n; i++) {
variance += Math.pow(arr.get(i) - mean, 2 );
}
variance /= n;
double std_deviation = Math.sqrt(variance);
System.out.println( "Variance = " + ( int ) variance);
System.out.println( "Standard Deviation = " + ( int ) std_deviation);
}
public static void main(String[] args) {
List<Integer> arr = new ArrayList<>();
arr.add( 7 );
arr.add( 7 );
arr.add( 8 );
arr.add( 8 );
arr.add( 3 );
calculateStats(arr);
}
}
|
Python3
arr = [ 7 , 7 , 8 , 8 , 3 ]
mean = sum (arr) / len (arr)
variance = sum ((i - mean) * * 2 for i in arr) / len (arr)
std_deviation = variance * * 0.5
print ( "Variance =" , int (variance))
print ( "Standard Deviation =" , int (std_deviation))
|
C#
using System;
using System.Linq;
class Program
{
static void Main()
{
int [] arr = { 7, 7, 8, 8, 3 };
double mean = arr.Sum() / ( double )arr.Length;
double variance = arr.Select(item => Math.Pow(item - mean, 2)).Sum() / arr.Length;
double stdDeviation = Math.Sqrt(variance);
Console.WriteLine( "Variance = " + ( int )variance);
Console.WriteLine( "Standard Deviation = " + ( int )stdDeviation);
}
}
|
Javascript
const arr = [7, 7, 8, 8, 3];
const mean = arr.reduce((sum, val) => sum + val, 0) / arr.length;
const variance = arr.reduce((sum, val) => sum + (val - mean) ** 2, 0) / arr.length;
const std_deviation = Math.sqrt(variance);
console.log( "Variance =" , Math.round(variance));
console.log( "Standard Deviation =" , Math.floor(std_deviation));
|
Output
Variance = 3
Standard Deviation = 1
Time complexity: O(n), where n is the number of elements in the input array. The code iterates over each element of the input array once to calculate the mean and again to calculate the variance.
Auxiliary Space: O(1), as it does not use any additional data structure to store the intermediate results.
Share your thoughts in the comments
Please Login to comment...