2013-01-09 29 views
0
class MatrixMultiplication { 
    def singleThreadedMultiplication(m1:Seq[Array[Double]], m2:Array[Array[Double]]) ={ 
    val res = Array.fill(m1.length, m2(0).length)(0.0) 

    for(row <- 0 until m1.length; 
     col <- 0 until m2(0).length; 
     i <- 0 until m1(0).length){ 
     res(row)(col) += m1(row)(i) * m2(i)(col) 
    } 

    res 
    } 
} 

__如何爲矩陣乘法創建一個Seq [Array [Double]]?

object multiplication { 
    def main(args : Seq[Array[Double]], args2 : Array[Double]) : Unit = { 
    val matrixmult = new MatrixMultiplication 
    var b = new Array[Double](4) 
    b = Array(2,1,2,1) 
    seq: Seq[Double] = WrappedArray(1, 0, 2, 0) 
    matrixmult.singleThreadedMultiplication(Seq[Double],b) 
    } 
} 

所有我需要的是知道的,因爲它的第一個參數是Seq[Array[Double]]我如何運行單線程乘法方法,我不知道,我沒能找到任何方式如何在第二個類中創建一個seq double數組。

回答

0

Seq是一個特質,有許多子類實現它。例如ListArrayBuffer。因此,您可以創建一個Array[Array[Double]]並將其傳遞給singleThreadedMultiplication。例如,可以使用val array = Array(Array(1.0,2.0,3.0))創建合適的類型,並將其傳遞給m1m2,例如singleThreadedMultiplication

object multiplication { 
    def main(args : Seq[Array[Double]], args2 : Array[Double]) : Unit = { 
    val matrixmult = new MatrixMultiplication 
    matrixmult.singleThreadedMultiplication(args, Array(args2) 
    } 
} 

要運行它,並使用刪除通過這些線路的參數,因爲它們不使用。

var b = new Array[Double](4) 
b = Array(2,1,2,1) 
seq: Seq[Double] = WrappedArray(1, 0, 2, 0) 

然後改變呼叫使用傳入的參數。

matrixmult.singleThreadedMultiplication(args, Array(args2)) 

這將運行,但你必須在singleThreadedMultiplication功能的java.lang.ArrayIndexOutOfBoundsException

scala> val a = Array(2.0,1.0,2.0,1.0) 
b: Array[Double] = Array(2.0, 1.0, 2.0, 1.0) 

scala> val b = Array(Array(1.0,0.0,2.0,0.0)) 
c: Array[Array[Double]] = Array(Array(1.0, 0.0, 2.0, 0.0)) 

scala> multiplication.main(b, a) 
java.lang.ArrayIndexOutOfBoundsException: 1 
at MatrixMultiplication$$anonfun$singleThreadedMultiplication$1$$anonfun$apply$mcVI$sp$1$$anonfun$apply$mcVI$sp$2.apply$mcVI$sp 
... 
+0

不應該它的工作,如果我建立它並像這樣運行? –

+0

它會像這樣構建。但是,要運行它,你必須首先創建'c'和'd',然後將它們傳遞到'main'或更改'main'函數。 – Brian

+0

但c和d還沒有值? (1.0,2.0,3.0,4.0)等? –