Passed
Pull Request — master (#2)
by Pol
04:33
created

Statistics::standardDeviationPartition()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
nc 1
nop 1
dl 0
loc 12
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace drupol\phpartition\Utils;
6
7
use drupol\phpartition\Partition\Partition;
8
use drupol\phpartition\Partitions\Partitions;
9
10
/**
11
 * Class Statistics.
12
 */
13
class Statistics
14
{
15
    /**
16
     * @param \drupol\phpartition\Partition\Partition $partition
17
     *
18
     * @return float|int
19
     */
20
    public static function meanPartition(Partition $partition)
21
    {
22
        return $partition->getWeight() / $partition->count();
23
    }
24
    /**
25
     * @param \drupol\phpartition\Partition\Partition $partition
26
     *
27
     * @return float
28
     */
29
    public static function standardDeviationPartition(Partition $partition)
30
    {
31
        $mean = self::meanPartition($partition);
32
33
        $sumSquareDiff = \array_sum(\array_map(
34
            static function ($sum) use ($mean) {
35
                return ($sum - $mean) ** 2;
36
            },
37
            $partition->getArrayCopy()
38
        ));
39
40
        return ($sumSquareDiff / $partition->count()) ** .5;
41
    }
42
    /**
43
     * @param \drupol\phpartition\Partitions\Partitions $partitions
44
     *
45
     * @return float
46
     */
47
    public static function standardDeviationPartitions(Partitions $partitions)
48
    {
49
        $partition = new Partition(
50
            \array_map(
51
                static function (Partition $partition) {
52
                    return $partition->getWeight();
53
                },
54
                $partitions->partitions()
55
            )
56
        );
57
58
        return self::standardDeviationPartition($partition);
59
    }
60
}
61