【发布时间】:2011-06-01 22:53:29
【问题描述】:
我正在尝试更多地使用 scalas 不可变集合,因为这很容易并行化,但我遇到了一些新手问题。我正在寻找一种从操作中(有效地)创建新向量的方法。准确地说,我想要类似的东西
val v : Vector[Double] = RandomVector(10000)
val w : Vector[Double] = RandomVector(10000)
val r = v + w
我测试了以下内容:
// 1)
val r : Vector[Double] = (v.zip(w)).map{ t:(Double,Double) => t._1 + t._2 }
// 2)
val vb = new VectorBuilder[Double]()
var i=0
while(i<v.length){
vb += v(i) + w(i)
i = i + 1
}
val r = vb.result
}
与使用 Array 的工作相比,两者都需要很长时间:
[Vector Zip/Map ] Elapsed time 0.409 msecs
[Vector While Loop] Elapsed time 0.374 msecs
[Array While Loop ] Elapsed time 0.056 msecs
// with warm-up (10000) and avg. over 10000 runs
有没有更好的方法呢?我认为使用 zip/map/reduce 的工作的优点是,只要集合对此提供支持,它就可以并行运行。
谢谢
【问题讨论】: