【发布时间】:2019-04-13 09:30:09
【问题描述】:
我有一个 mutableList 并希望获取其所有行的总和,并根据某些标准将其行替换为其他一些值。下面的代码对我来说工作正常,但我想问有没有办法摆脱嵌套的 for 循环,因为 for 循环会降低性能。我想使用 scala 高阶方法而不是嵌套的 for 循环。我尝试使用 flodLeft() 高阶方法替换单个 for 循环,但无法实现替换嵌套 for 循环
def func(nVect : Int , nDim : Int) : Unit = {
var Vector = MutableList.fill(nVect,nDimn)(math.random)
var V1Res =0.0
var V2Res =0.0
var V3Res =0.0
for(i<- 0 to nVect -1) {
for (j <- i +1 to nVect -1) {
var resultant = Vector(i).zip(Vector(j)).map{case (x,y) => x + y}
V1Res = choice(Vector(i))
V2Res = choice(Vector(j))
V3Res = choice(resultant)
if(V3Res > V1Res){
Vector(i) = res
}
if(V3Res > V2Res){
Vector(j) = res
}
}
}
}
【问题讨论】:
-
这里最大的性能问题是通过索引访问
List的元素。把MutableList改成Array应该会快很多。 -
如果您正在寻找性能,我是否建议您使用专门构建的数值处理库,例如 Breeze:github.com/scalanlp/breeze
-
@Tim 是的,这也是一个有效的观点,但主要关注的是 for 循环,当我们谈论并行性时,for 循环是阻碍的主要原因。
-
我们不是在谈论并行性。或者更确切地说,您在问题的任何地方都没有提到并行性。也许你需要重新考虑你在问什么?此外,这段代码中没有循环,只是对
foreach的函数调用。
标签: scala