在 Scala 函数中接收 Int 或 Double 的数组



>我有以下规范化函数:

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

我希望它能工作,无论它接收双精度数组还是整数数组。 比仅仅将 Int 数组转换为双精度数组更好,我想一定有更好的方法来做到这一点,也许使用更通用的类型或指定Array[Doubles]Array[Int]可以模糊地接收, 在函数定义中。

你有什么想法吗?

这是一个将所有输入转换为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],因为为Ints、Longs 和所有其他整数类型返回Array[N]似乎没有任何意义。

举个例子:

normalize(Array[Int](0, 1, 3))
// returns: Array[Double]
// Array(0.0, 0.3333333333333333, 1.0)

最新更新