2016-05-26 4 views
-1
лестницу

У меня есть набор векторов, какКак суммировать все значения в векторе

var coefficentsList = new MutableList[Vector] 

Я хочу суммировать каждый элемент индивидуального вектора к каждому столбцу других векторов таких. например, coefficentsList будет иметь следующие векторы:

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] 

Теперь, чтобы сделать это, я наткнулся на шлакобетонных векторов here и here поэтому я написал следующий код:

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

но его дает мне исключение несоответствия типов: найдено Array [Double], требуется: String

Есть ли другой способ сделать это, как я озадачен с этим

+0

'VECTOR' нужен параметр типа так первый, исправить ошибки при вводе. Кроме того, зачем вам нужно использовать 'toArray'? Использовать 'map' прямо на вашем' MutableList' нет? – alifirat

+1

@alifirat Это может быть 'scala.collection.immutable.Vector',' breeze.linalg.Vector' или 'o.a.s.mllib.linalg.Vector' - это даже не ясно из контекста. – zero323

+0

@ zero323 Это действительно o.a.s.mllib.linalg.Vector – hbabbar

ответ

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) 
+0

Но не распараллеливается (что является причиной использования 'reduce') –

Смежные вопросы