Вот версия, которая преобразует все входные данные в Double
, а затем действует точно так же, как ваш исходный код:
def normalize[N: math.Numeric](data: Array[N]): Array[Double] = {
val num = implicitly[Numeric[N]]
val dataValues = data.map(num.toDouble)
val min = dataValues.min
val max = dataValues.max
dataValues.map(v => (v - min) / (max - min))
}
Тип возвращаемого значения всегда Array[Double]
, поскольку, кажется, нет смысла возвращать Array[N]
для Int
с, Long
с и всех других целочисленных типов.
Пример:
normalize(Array[Int](0, 1, 3))
// returns: Array[Double]
// Array(0.0, 0.3333333333333333, 1.0)