假设我需要对三个向量求和:
val sum3: (Vector[Int], Vector[Int], Vector[Int]) => Vector[Int] = (v1, v2, v3) =>
(v1 zip v2 zip v3) map {case ((x1, x2), x3) => x1 + x2 + x3}如果我以这种方式对5-6个向量求和,我最终会得到4-5个嵌套的元组。有没有更好的方法来求几个向量的和?
发布于 2016-08-03 21:46:14
Vector(v1,v2,v3).transpose.map(_.sum)
发布于 2016-08-03 23:51:05
注意内存分配,根据你的向量大小,它可能不是你想要的。避免这种情况的一种方法是使用完全命令式的方法,或者这样做:
def sum(v: Vector[Int], vs: Vector[Int]*): Vector[Int] = {
val ixs = 0 until v.length
for {
_ <- v.slice(0, 1) // Hint for CanBuildFrom
ix <- ixs
} yield vs.foldLeft(v(ix))(_ + _(ix))
}
scala> sum(Vector(1,2,3), Vector(4,5,6), Vector(7, 8, 9))
res0: Vector[Int] = Vector(12, 15, 18)https://stackoverflow.com/questions/38745293
复制相似问题