Completed
Push — develop ( a2e8a8...95caef )
by Arkadiusz
02:53
created

DataTransformer::numericLabels()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 13
rs 9.4285
cc 3
eloc 7
nc 3
nop 1
1
<?php
2
3
declare (strict_types = 1);
4
5
namespace Phpml\SupportVectorMachine;
6
7
class DataTransformer
8
{
9
    /**
10
     * @param array $samples
11
     * @param array $labels
12
     *
13
     * @return string
14
     */
15
    public static function trainingSet(array $samples, array $labels): string
16
    {
17
        $set = '';
18
        $numericLabels = self::numericLabels($labels);
19
        foreach ($labels as $index => $label) {
20
            $set .= sprintf('%s %s %s', $numericLabels[$label], self::sampleRow($samples[$index]), PHP_EOL);
21
        }
22
23
        return $set;
24
    }
25
26
    /**
27
     * @param array $labels
28
     *
29
     * @return array
30
     */
31
    public static function numericLabels(array $labels): array
32
    {
33
        $numericLabels = [];
34
        foreach ($labels as $label) {
35
            if (isset($numericLabels[$label])) {
36
                continue;
37
            }
38
39
            $numericLabels[$label] = count($numericLabels);
40
        }
41
42
        return $numericLabels;
43
    }
44
45
    /**
46
     * @param array $sample
47
     *
48
     * @return string
49
     */
50
    private static function sampleRow(array $sample): string
51
    {
52
        $row = [];
53
        foreach ($sample as $index => $feature) {
54
            $row[] = sprintf('%s:%s', $index, $feature);
55
        }
56
57
        return implode(' ', $row);
58
    }
59
}
60