$distances Distances * @param array $bandwidths Bandwidths * * @return array * * @since 1.0.0 */ public static function gaussianKernel(array $distances, array $bandwidths) : array { $dim = \count($bandwidths); $bandwithMatrix = Matrix::fromArray($bandwidths); $distnaceMatrix = Matrix::fromArray($distances); $identityMatrix = new IdentityMatrix($dim); $cov = $bandwithMatrix->mult($identityMatrix); /** @phpstan-ignore-next-line */ $exponent = $distnaceMatrix->dot($cov->inverse())->mult($distnaceMatrix)->sum(1)->mult(-0.5); return $exponent->exp()->mult((1 / \pow(2 * \M_PI, $dim / 2)) * \pow($cov->det(), 0.5))->matrix; } }