missingValue = $missingValue; $this->strategy = $strategy; $this->axis = $axis; } /** * @param array $samples */ public function preprocess(array &$samples) { foreach ($samples as &$sample) { $this->preprocessSample($sample, $samples); } } /** * @param array $sample * @param array $samples */ private function preprocessSample(array &$sample, array $samples) { foreach ($sample as $column => &$value) { if ($value === $this->missingValue) { $value = $this->strategy->replaceValue($this->getAxis($column, $sample, $samples)); } } } /** * @param int $column * @param array $currentSample * @param array $samples * * @return array */ private function getAxis(int $column, array $currentSample, array $samples): array { if (self::AXIS_ROW === $this->axis) { return array_diff($currentSample, [$this->missingValue]); } $axis = []; foreach ($samples as $sample) { if ($sample[$column] !== $this->missingValue) { $axis[] = $sample[$column]; } } return $axis; } }