以下代码平均数组中相同位置的值:
val toadd = List(Array(8.0, 4.0), Array(5.0, 8.0), Array(7.0, 5.0))
val a1 = toadd.map(m => m(0)).sum
val a2 = toadd.map(m => m(1)).sum
(a1/toadd.size , a2/toadd.size)
目前这适用于长度为2的数组。
如何修改它以使其适用于任意长度的数组?
答案 0 :(得分:3)
如何使用transpose
:
toadd.transpose.map(xs => xs.sum / xs.size)
// List(6.666666666666667, 5.666666666666667)
答案 1 :(得分:2)
我喜欢使用transpose
的想法,正如dhg所建议的那样。如果你想使用更原始的函数,你可以这样做:
toadd reduce {
(x, y) => (x zip y) map {
case (a, b) => a + b
}
} map { a => a / toadd.length }
或者更简洁:
toadd.reduce(_.zip(_).map(a=>a._1+a._2)).map(_/toadd.length)
答案 2 :(得分:0)
你想要像
这样的东西val innerSize = toadd.map(_.length).min
然后从0 until innerSize
映射,而不是使用a1
,a2
等手动进行映射。