2016-05-01 8 views
1

私はScalaの配列で操作をしようとしています。Scala:配列の操作を使用する方法

xは2d配列であり、yは1d配列です。例えば

val x = Array(Array(1.0,2.0,3.0),Array(4.0,5.0,6.0),Array(7.0,8.0,9.0),Array(10.0,11.0,12.0).....Array(..)) 
val y = Array(2.0,3.0,4.0,5.0,.....n) 

は、私は私が行う方法がわからない Array[Double](3)
Array(1.0*2.0 + 4.0*3.0 + 7.0 * 4.0 + 10.0 * 5.0 ...., 2.0*2.0 + 5.0*3.0 + 8.0*4.0 + 11.0 * 5.0 ....., 3.0*2.0 + 6.0 * 3.0 + 9.0 * 4.0 + 12.0 * 5.0....) 

のように取得したい x.length = y.length

と仮定します。

は私がx.map(x => (x zip y).map{case(a, b) => a * b})

は明らかに間違って使用し、それを行うための理想的な方法は何ですか? transposeを使用して

おかげ

答えて

2

は、これが容易になりますどの行にxの列をオン - 各列は、その後yでジップことができ、その後、値を乗算し、合計することができます。

val x = Array(Array(1.0,2.0,3.0),Array(4.0,5.0,6.0),Array(7.0,8.0,9.0),Array(10.0,11.0,12.0)) 
val y = Array(2.0,3.0,4.0,5.0) 

val result = x.transpose.map(_.zip(y).map { case (a, b) => a*b }.sum) 

print(result.mkString(",")) // prints 92.0,106.0,120.0 
+0

ああ、 非常に役立ちます !!! –

関連する問題