Scala:如何使用数组的操作
Scala: How to use array's operation
我正在尝试在 Scala 中对数组进行操作。
x 是一个二维数组,y 是一个一维数组。例如
val x = Array(Array(1.0,2.0,3.0),Array(4.0,5.0,6.0),Array(7.0,8.0,9.0),Array(10.0,11.0,12.0).....Array(..))
val y = Array(2.0,3.0,4.0,5.0,.....n)
假设 x.length = y.length
我希望得到一个Array[Double](3)
赞
Array(1.0*2.0 + 4.0*3.0 + 7.0 * 4.0 + 10.0 * 5.0 ...., 2.0*2.0 + 5.0*3.0 + 8.0*4.0 + 11.0 * 5.0 ....., 3.0*2.0 + 6.0 * 3.0 + 9.0 * 4.0 + 12.0 * 5.0....)
我不知道怎么办。
我用了x.map(x => (x zip y).map{case(a, b) => a * b})
显然是错误的,理想的方法是什么?
谢谢
使用 transpose
将 x
的列变成行,这使得这更容易 - 然后可以用 y
压缩每一列,然后可以将值相乘和相加:
val x = Array(Array(1.0,2.0,3.0),Array(4.0,5.0,6.0),Array(7.0,8.0,9.0),Array(10.0,11.0,12.0))
val y = Array(2.0,3.0,4.0,5.0)
val result = x.transpose.map(_.zip(y).map { case (a, b) => a*b }.sum )
print(result.mkString(",")) // prints 92.0,106.0,120.0
我正在尝试在 Scala 中对数组进行操作。
x 是一个二维数组,y 是一个一维数组。例如
val x = Array(Array(1.0,2.0,3.0),Array(4.0,5.0,6.0),Array(7.0,8.0,9.0),Array(10.0,11.0,12.0).....Array(..))
val y = Array(2.0,3.0,4.0,5.0,.....n)
假设 x.length = y.length
我希望得到一个Array[Double](3)
赞
Array(1.0*2.0 + 4.0*3.0 + 7.0 * 4.0 + 10.0 * 5.0 ...., 2.0*2.0 + 5.0*3.0 + 8.0*4.0 + 11.0 * 5.0 ....., 3.0*2.0 + 6.0 * 3.0 + 9.0 * 4.0 + 12.0 * 5.0....)
我不知道怎么办。
我用了x.map(x => (x zip y).map{case(a, b) => a * b})
显然是错误的,理想的方法是什么?
谢谢
使用 transpose
将 x
的列变成行,这使得这更容易 - 然后可以用 y
压缩每一列,然后可以将值相乘和相加:
val x = Array(Array(1.0,2.0,3.0),Array(4.0,5.0,6.0),Array(7.0,8.0,9.0),Array(10.0,11.0,12.0))
val y = Array(2.0,3.0,4.0,5.0)
val result = x.transpose.map(_.zip(y).map { case (a, b) => a*b }.sum )
print(result.mkString(",")) // prints 92.0,106.0,120.0