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