public static arithmetic ( array $numbers ) : float | ||
$numbers | array | |
return | float |
public function testArithmeticMean() { $delta = 0.01; $this->assertEquals(3.5, Mean::arithmetic([2, 5]), '', $delta); $this->assertEquals(41.16, Mean::arithmetic([43, 21, 25, 42, 57, 59]), '', $delta); $this->assertEquals(1.7, Mean::arithmetic([0.5, 0.5, 1.5, 2.5, 3.5]), '', $delta); }
/** * @param array|float[] $a * @param bool $sample * * @return float * * @throws InvalidArgumentException */ public static function population(array $a, $sample = true) { if (empty($a)) { throw InvalidArgumentException::arrayCantBeEmpty(); } $n = count($a); if ($sample && $n === 1) { throw InvalidArgumentException::arraySizeToSmall(2); } $mean = Mean::arithmetic($a); $carry = 0.0; foreach ($a as $val) { $d = $val - $mean; $carry += $d * $d; } if ($sample) { --$n; } return sqrt((double) ($carry / $n)); }
/** * @param array|int[]|float[] $x * @param array|int[]|float[] $y * * @return float * * @throws InvalidArgumentException */ public static function pearson(array $x, array $y) { if (count($x) !== count($y)) { throw InvalidArgumentException::arraySizeNotMatch(); } $count = count($x); $meanX = Mean::arithmetic($x); $meanY = Mean::arithmetic($y); $axb = 0; $a2 = 0; $b2 = 0; for ($i = 0; $i < $count; ++$i) { $a = $x[$i] - $meanX; $b = $y[$i] - $meanY; $axb = $axb + $a * $b; $a2 = $a2 + pow($a, 2); $b2 = $b2 + pow($b, 2); } $corr = $axb / sqrt((double) ($a2 * $b2)); return $corr; }
/** * @param array $currentAxis * * @return float */ public function replaceValue(array $currentAxis) { return Mean::arithmetic($currentAxis); }