>我有以下规范化函数:
...
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]
,因为为Int
s、Long
s 和所有其他整数类型返回Array[N]
似乎没有任何意义。
举个例子:
normalize(Array[Int](0, 1, 3))
// returns: Array[Double]
// Array(0.0, 0.3333333333333333, 1.0)