Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.
<?php

declare(strict_types=1);

namespace Phpml\Math\Statistic;

use Phpml\Exception\InvalidArgumentException;

class StandardDeviation
{
    /**
     * @param float[]|int[] $numbers
     */
    public static function population(array $numbers, bool $sample = true): float
    {
        $n = count($numbers);
        if ($n === 0) {
            throw new InvalidArgumentException('The array has zero elements');
        }

        if ($sample && $n === 1) {
            throw new InvalidArgumentException('The array must have at least 2 elements');
        }

        $mean = Mean::arithmetic($numbers);
        $carry = 0.0;
        foreach ($numbers as $val) {
            $carry += ($val - $mean) ** 2;
        }

        if ($sample) {
            --$n;
        }

        return ($carry / $n) ** .5;
    }

    /**
     * Sum of squares deviations
     * ∑⟮xᵢ - μ⟯²
     *
     * @param float[]|int[] $numbers
     */
    public static function sumOfSquares(array $numbers): float
    {
        if (count($numbers) === 0) {
            throw new InvalidArgumentException('The array has zero elements');
        }

        $mean = Mean::arithmetic($numbers);

        return array_sum(array_map(
< function ($val) use ($mean) {
> static function ($val) use ($mean): float {
return ($val - $mean) ** 2; }, $numbers )); } }