首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Scala中对几个向量求和?

如何在Scala中对几个向量求和?
EN

Stack Overflow用户
提问于 2016-08-03 21:38:26
回答 2查看 835关注 0票数 0

假设我需要对三个向量求和:

代码语言:javascript
复制
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个嵌套的元组。有没有更好的方法来求几个向量的和?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-03 21:46:14

Vector(v1,v2,v3).transpose.map(_.sum)

票数 4
EN

Stack Overflow用户

发布于 2016-08-03 23:51:05

注意内存分配,根据你的向量大小,它可能不是你想要的。避免这种情况的一种方法是使用完全命令式的方法,或者这样做:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38745293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档