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

を次の擬似コードを示唆しているように、単一の行列で、その結果、他の1つの行列を追加するには、いくつかの効率的な方法は何ですか?明らかに、寸法の1つ(この場合P)は一定に保たれる。別ウィンドウ(タブ)の大きな表示で見る

編集:これまで提供されているソリューションの両方が2番目の次元で成長しています。私は第二の次元を固定して保持しようとしています。

答えて

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)) 

(コメントへの返信で...)

固定された第2の次元開催:

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を一定に保っていました(二次元目) –

+0

ありがとう、それはトリックでした。 –

+1

他の次元で最も簡単に成長する方法は、最初に2つの入力配列を転置し、連結後に出力を転置することです。 –

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を一定に保ちました(第2の次元) –

関連する問題