2011-04-21 46 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

相關問題