2011-04-21 96 views
1

如果我有以下代码:怎样一个矩阵追加到另一个在Scala呢?

var A = Array[Array[Double]]() // where A becomes an MxP matrix 
var B = Array[Array[Double]]() // where B becomes an NxP matrix 

什么是一些有效的方法,以一个矩阵追加到另一个,导致一个矩阵,如下面的伪代码建议?

val C = A append B // where C is a (M+N)xP matrix 

显然,其中一个维度(在这种情况下为P)保持不变。

编辑:到目前为止,双方提供的解决方案的增长是在第二个层面。我试图保持固定的第二个维度。

回答

5

功能,但不作为高性能作为当务之急备选方案是:

scala> val a = Array.tabulate(2, 3)((_, _) => (math.random * 100).toInt) 
a: Array[Array[Int]] = Array(Array(52, 61, 58), Array(35, 69, 39)) 

scala> val b = Array.tabulate(2, 4)((_, _) => (math.random * 100).toInt) 
b: Array[Array[Int]] = Array(Array(51, 54, 87, 10), Array(52, 76, 18, 85)) 

scala> (a, b).zipped.map(_ ++ _) 
res0: Array[Array[Int]] = Array(Array(52, 61, 58, 51, 54, 87, 10), Array(35, 69, 39, 52, 76, 18, 85)) 

(在答复评论...)

保持固定在第二维数:

scala> val x = Array.tabulate(3, 2)((_, _) => (math.random * 100).toInt) 
x: Array[Array[Int]] = Array(Array(13, 26), Array(96, 6), Array(68, 58)) 

scala> val y = Array.tabulate(2, 2)((_, _) => (math.random * 100).toInt) 
y: Array[Array[Int]] = Array(Array(82, 5), Array(0, 76)) 

scala> x ++ y 
res1: Array[Array[Int]] = Array(Array(13, 26), Array(96, 6), Array(68, 58), Array(82, 5), Array(0, 76)) 
+0

性能没有太大了关注这部分代码。是否有可能在另一个方向发展呢?也就是说,在我的帖子,我时,P保持不变(第二维) – 2011-04-21 16:03:44

+0

谢谢,这确实起作用。 – 2011-04-21 16:21:47

+1

最简单的(尽管不一定是最快)的方式在另一维度生长是第一个'transpose'两个输入数组,然后转级联后的输出。 – 2011-04-21 18:27:39

1
scala> val a = Array.fill(4,3) { 1. }; 
a: Array[Array[Double]] = Array(Array(1.0, 1.0, 1.0), Array(1.0, 1.0, 1.0), Array(1.0, 1.0, 1.0), Array(1.0, 1.0, 1.0)) 

scala> val b = Array.fill(4,6) { 2. };   
b: Array[Array[Double]] = Array(Array(2.0, 2.0, 2.0, 2.0, 2.0, 2.0), Array(2.0, 2.0, 2.0, 2.0, 2.0, 2.0), Array(2.0, 2.0, 2.0, 2.0, 2.0, 2.0), Array(2.0, 2.0, 2.0, 2.0, 2.0, 2.0)) 

scala> for((aa,bb) <- a zip b) yield (aa ++ bb) 
res0: Array[Array[Double]] = Array(Array(1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0), Array(1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0), Array(1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0), Array(1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0)) 
+0

是否有可能将其在其他方向生长?也就是说,在我的发帖中,我让P保持不变(第二维) – 2011-04-21 16:04:32