Получить массив Int или Double в функции Scala - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть следующая функция нормализации:

...
private def NormalizeValues(dataValues: Array [Double]): Array[Double] = {
val min = dataValues.min
val max = dataValues.max
dataValues.map(v => (v - min) / (max - min))
}
...

И я хочу, чтобы он работал независимо от того, получает ли он Array of Double или Array of Int. Лучше, чем просто превратить Array of Int в Array of Double, я думаю, должен быть лучший способ сделать это, возможно, используя более общий тип или указав, что Array[Doubles] и Array[Int] могут быть получены нечетко, в определении функции.

Есть идеи?

1 Ответ

0 голосов
/ 02 сентября 2018

Вот версия, которая преобразует все входные данные в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...