2016-04-25 48 views
0

相乘我有两个2D阵列,我想乘如不同大小的二维阵列中的阶

val x = Array(Array(2.0, 5.0)) 
val y = Array(Array(1.0, -1.0), Array(-1.0, 1.0), Array(2.0, -2.0)) 

我想获得1D-阵列状

Array(2.0 * 1.0 + 5.0 * -1.0, 2.0 * -1.0 + 5.0 * 1.0, 2.0 * 2.0 + 5.0 * -2.0) 

我用x.zip(y) map (_.zipped map (_ * _)) map (_.sum)

但我只得到Array(-3.0)

我该怎么办?

谢谢你的时间。

对不起,我的意思是说,X数组的大小总是会1项状阵列(阵列(2.0,5.0))

+0

x中只有1个项目吗? – ccheneson

+0

@ccheneson 如果我将x.zip(y)地图(_.zipped地图(_ * _))地图(_.sum)分配给z val z = x.zip(y)地图(_.zipped地图如果'x'可以是例如'Array(Array(2.0,5.0),Array(_ *))map(_.sum) 我将得到z = Array [Double]( - 3.0) –

+0

6.0,2.0))'或者会有*总是* 1个项目,比如'Array(Array(2.0,5.0))'? – ccheneson

回答

2

对于x和y定义如上,以下应工作。但是,如果x是阵列数组,那么答案会不同。

scala> y map {x.flatten zip _ map {case(a,b) => a*b} reduce (_+_)} 
res5: Array[Double] = Array(-3.0, 3.0, -6.0) 
+0

无论子阵列的大小如何,一般的答案都是类似于 '''val z = y map {y1 => x map {_ zip y1 map {case(a,b)=> a * b} reduce(_ + _)}}''' 如果需要的话,你可以扁平化。 –

+0

'reduce(_ + _)'可以替换为'sum' –

+0

感谢您帮助我 –