internal INeuron CalculateBMU(IVector input) { INeuron bmu = _matrix[0, 0]; double bestDist = input.EuclidianDistance(bmu.Weights); for (int i = 0; i < _width; i++) { for (int j = 0; j < _height; j++) { var distance = input.EuclidianDistance(_matrix[i, j].Weights); if (distance < bestDist) { bmu = _matrix[i, j]; bestDist = distance; } } } return(bmu); }