performance - Scala快速生成上三角矩阵坐标

标签 performance scala matrix parallel-processing

作为第一次尝试考虑

for (a <- 1 to 5; b <- 1 to 5; if a < b) yield (a,b)

这给出了

Vector((1,2), (1,3), (1,4), (1,5), 
              (2,3), (2,4), (2,5), 
                     (3,4), (3,5), 
                            (4,5))

只有一半的 b 值有效,因此

for (a <- 1 to 5; b <- a+1 to 5) yield (a,b)

还提供相同的上三角矩阵坐标。

询问生成此坐标向量的更快方法。

非常感谢。

最佳答案

您能做的最好的事情就是将所有内容放入Array中,并在while循环(或递归)中创建元素,以避免通用机制带来的任何开销对于。 (实际上,使用两个数组,每个索引一个数组,速度会更快。)

val a = {
  val temp = new Array[(Int, Int)](5*4/2)
  var k = 0
  var i = 1
  while (i <= 5) {
    var j = i+1
    while (j <= 5) {
      temp(k) = (i,j)
       j += 1
       k += 1
    }
    i += 1
  }
  temp
}

但是除非您有充分的理由相信您的其他方法不能充分发挥作用,否则您不应该遇到所有这些麻烦。

您已将其命名为“并行处理”,但您可能会给内存子系统带来沉重的负担,以至于并行化不会对您有太大帮助。但当然,您始终可以将一些线路拆分到不同的处理器上。你需要一些远大于 5 的东西才能成为一个好主意。

关于performance - Scala快速生成上三角矩阵坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22630879/

相关文章:

python - 嵌套的 For 循环与计算对比。线性过程

file - Scala - 按文件后缀名从文件夹中删除文件

python - 将字典的内容导出到 m x n 矩阵

c++ - 图博弈算法

java - 在Java中绘制方阵

c - C 中数组的大小是否会影响访问或更改数组中的一段数据的时间

performance - Scala 的理解性能

string - 将多行字符串转换为单行

java - 在 Java 中将对象转换为字节流的最快方法是什么?

scala 如何将一种类型的 future 转换为另一种类型的 future