在List中的相同位置平均值

时间:2015-03-03 23:04:57

标签: scala

以下代码平均数组中相同位置的值:

  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的数组。

如何修改它以使其适用于任意长度的数组?

3 个答案:

答案 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映射,而不是使用a1a2等手动进行映射。