Arrays 不同大小的二维数组在scala中相乘

Arrays 不同大小的二维数组在scala中相乘,arrays,scala,sum,Arrays,Scala,Sum,我有两个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)) 我想得到一维数组 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)映射(*.\uzip映射(*.))映射(*..sum) 但我只得到

我有两个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))
我想得到一维数组

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)映射(*.\uzip映射(*.))映射(*..sum)

但我只得到
数组(-3.0)

我该怎么办

谢谢你抽出时间


对不起,我的意思是x数组的大小将始终是1个类似于数组的项目(数组(2.0,5.0))

对于上面定义的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)

对于上面定义的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)

如果我将x.zip(y)映射(.zip映射(*)映射(.sum)分配给z val z=x.zip(y)映射(.zip映射(*)映射(.sum),我将得到z=Array[Double](-3.0),我的意思是如果
x
可以是例如
Array(Array(2.0,5.0),Array(6.0,2.0))
或者总是有一个类似
Array的项(数组(2.0,5.0))
?请详细说明您的问题。如果x大小不同于1,会发生什么情况?嵌套数组是否总是大小相同?如果我将x.zip(y)map(.zipped map(*)map(.sum)分配给z val z=x.zip(y)map(.zipped map(*)map(.sum)我将得到z=Array[Double](-3.0)我的意思是,如果
x
可以是例如
Array(Array(2.0,5.0),Array(6.0,2.0))
或者总是有一个类似
Array(Array(2.0,5.0))的项目
?请详细说明您的问题。如果x大小不同于1,会发生什么情况?嵌套数组的大小是否总是相同?不管子数组的大小,一般的答案是类似于
val z=y map{y1=>x map{zip y1 map{case(a,b)=>a*b}reduce({u+}}
如果需要,您可以将其展平。
reduce(+)
可以替换为
sum
感谢您的帮助。无论子数组的大小,通用答案都类似于
val z=y-map{y1=>x-map{zip-y1-map{case(a,b)=>a*b}reduce reduce(+)}
如果需要,您可以将其展平。
reduce(+)
可以替换为
sum
谢谢您的帮助