Arrays scala中的多维数组zip数组
我是scala的新手 我有两个数组,如:Arrays scala中的多维数组zip数组,arrays,scala,zip,Arrays,Scala,Zip,我是scala的新手 我有两个数组,如: val one = Array(1, 2, 3, 4) val two = Array(4, 5, 6, 7) var three = one zip two map{case(a, b) => a * b} 没关系 但我现在有一个多维数组和一个一维数组,如下所示: val mulOne = Array(Array(1, 2, 3, 4),Array(5, 6, 7, 8),Array(9, 10, 11, 12)) val one_arr =
val one = Array(1, 2, 3, 4)
val two = Array(4, 5, 6, 7)
var three = one zip two map{case(a, b) => a * b}
没关系
但我现在有一个多维数组和一个一维数组,如下所示:
val mulOne = Array(Array(1, 2, 3, 4),Array(5, 6, 7, 8),Array(9, 10, 11, 12))
val one_arr = Array(1, 2, 3, 4)
我想将它们相乘,如何在scala中实现
提前谢谢。试试这个
mulOne.map{x => (x, one_arr)}.map { case(one, two) => one zip two map{case(a, b) => a * b} }
mulOne.map{x=>(x,one_arr)}
=>对于mulOne
中的每个数组,创建一个包含one_arr内容的元组
.map{case(one,two)=>one-zip-two-map{case(a,b)=>a*b}}
基本上是您在第一个示例中对第一步中创建的每个元组执行的操作 您可以使用:
val tmpArr = mulOne.map(_ zip one_arr).map(_.map{case(a,b) => a*b})
tmpArr.map(_.reduce(_ + _))
这将为您提供数组(数组(1*1,2*2,3*3,4*4)、数组(5*1,6*2,7*3,8*4)、数组(9*1,10*2,11*3,12*4))
这里的mulOne.map(zip one_arr)
将mulOne
的每个内部数组与one arr
的相应元素映射,以创建如下对:数组(数组((1,1)、(2,2)、(3,3)、(4,4)),…)
(注意:我使用了占位符语法)。在下一步中,.map(u.map{case(a,b)=>a*b})
将成对的每个元素相乘,得到
像这样的输出:Array(Array(1,4,9,16),…)
然后你可以使用:
val tmpArr = mulOne.map(_ zip one_arr).map(_.map{case(a,b) => a*b})
tmpArr.map(_.reduce(_ + _))
要获得所有内部
数组的总和
s以获得数组(30,70,110)
,请使用这样的方法进行理解
val prods =
for { xs <- mulOne
zx = one_arr zip xs
(a,b) <- zx
} yield a*b
提供最终结果。您希望输出结果是什么?1*1+2*2+3*3+4*4 5*1+6*2+7*3+8*4……这对我也有帮助。谢谢