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
}
}
__
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双数组在第二节课。
答案 0 :(得分:0)
Seq
是一个特征,有许多子类实现它。例如List
和ArrayBuffer
。因此,您可以创建Array[Array[Double]]
并将其传递给singleThreadedMultiplication
。可以使用val array = Array(Array(1.0,2.0,3.0))
创建相应的类型,并将其传递给m1
中的m2
或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))
这会运行但java.lang.ArrayIndexOutOfBoundsException
函数中有singleThreadedMultiplication
。
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
...