【问题标题】:How to sum every value in scala vector如何对scala向量中的每个值求和
【发布时间】:2016-05-26 15:56:28
【问题描述】:

我有一个向量集合

var coefficentsList = new MutableList[Vector]

我想将单个向量的每个元素与其他向量的每一列相加。例如,coefficientsList 将具有以下向量:

v1 = [0.2, 0.4, 0.1]
v2 = [0.4, 0.5, 0.1]
v3 = [0, 0, 0.3]

所以我想要像

这样的合成向量
V = [0.6, 0.9, 0.5]

现在要做到这一点,我遇到了微风矢量herehere,所以我编写了以下代码:

coefficentsList.toArray.map{
  Vector(_).reduce(_ + _)
}

但它给了我一个类型不匹配的异常:找到 Array[Double],需要:String

有没有其他方法可以做到这一点,因为我对此感到困惑

【问题讨论】:

  • a Vector 需要一个类型参数,所以首先,修复你的类型错误。另外,为什么需要使用 toArray ?直接在您的MutableList 上使用map 否?
  • @alifirat 这可以是scala.collection.immutable.Vectorbreeze.linalg.Vectoro.a.s.mllib.linalg.Vector - 从上下文中甚至都不清楚。
  • @zero323 确实是o.a.s.mllib.linalg.Vector

标签: scala vector apache-spark apache-spark-mllib


【解决方案1】:

zip 满足您的需求

val coefficientsList = List(
  Vector(0.2, 0.4, 0.1),
  Vector(0.4, 0.5, 0.1),
  Vector(0.0, 0.0, 0.3)
)

val result = coefficientsList.reduceLeft { (acc, vec) =>
  acc zip vec map {
    case (a, b) => a + b
  }
}
// result: scala.collection.immutable.Vector[Double] = Vector(0.6, 0.9, 0.5)

【讨论】:

  • 但是不并行化(这就是使用reduce的原因)
猜你喜欢
  • 1970-01-01
  • 2015-10-24
  • 2021-01-04
  • 2021-03-02
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
  • 2016-06-09
  • 2021-09-20
相关资源
最近更新 更多