missingValue = $missingValue; $this->strategy = $strategy; $this->axis = $axis; $this->samples = $samples; } public function fit(array $samples, ?array $targets = null): void { $this->samples = $samples; } public function transform(array &$samples, ?array &$targets = null): void { if ($this->samples === []) { throw new InvalidOperationException('Missing training samples for Imputer.'); } foreach ($samples as &$sample) { $this->preprocessSample($sample); } } private function preprocessSample(array &$sample): void { foreach ($sample as $column => &$value) { if ($value === $this->missingValue) { $value = $this->strategy->replaceValue($this->getAxis($column, $sample)); } } } private function getAxis(int $column, array $currentSample): array { if ($this->axis === self::AXIS_ROW) { return array_diff($currentSample, [$this->missingValue]); } $axis = []; foreach ($this->samples as $sample) { if ($sample[$column] !== $this->missingValue) { $axis[] = $sample[$column]; } } return $axis; } }