这里的新手。
val arr_one = Array(Array(1, 2), Array(3, 4), Array(5, 6),Array(x, y)..and so on)
val arr_two = Array(Array(2,3), Array(4, 5), Array(6, 7))
var tempArr = ArrayBuffer[Double]()
例如,我想乘以arr_one和arr_two。
迭代 1:Array(1*2+2*3, 1*4 +2*5, 1*6+2*7 )
分配给 tempArr
迭代 2:Array(3*2+4*3, 3*4 +4*5, 3*6+4*7)
分配给 tempArr
迭代 3:Array(5*2+6*3, 5*4 +6*5, 5*6+6*7)
分配给 tempArr
我知道如果
val x = Array(1, 2) ; val y = Array(Array(2,3), Array(4, 5), Array(6, 7))
我可以使用y map {x zip _ map{case(a, b) => a * b} sum}
但是如果x喜欢arr_one形式,我不知道如何使用for loop or something else
来做到这一点。
我真的有想法。
如何在 scala 中执行此操作?
真的谢谢。
我相信这可以满足您的需求,没有任何可变状态和"迭代" - 它使用"用于理解"语法,这是一种非命令性的 for 循环 - 换句话说,它不是在每次迭代中更改状态,而是返回一个值,该值是每个"迭代"的结果序列:
val result: Array[Array[Int]] = for (arr1 <- arr_one) yield {
for (arr2 <- arr_two) yield multArrays(arr1, arr2)
}
假设multArrays
具有以下签名:
def multArrays(arr1: Array[Int], arr2: Array[Int]): Int
这将计算每个单元格的值。一个朴素的实现(假设数组的大小为 2)将是:
def multArrays(arr1: Array[Int], arr2: Array[Int]): Int = {
arr1(0) * arr2(0) + arr1(1) * arr2(1)
}
但当然,这可以推广到任何大小的数组。
也许这就是你需要的:
val tmp = arr_one map ((arr1) => {arr_two map (arr2 => (arr1 zip arr2) map {case(a, b) => a * b} reduce (_ + _))} )
要获得ArrayBuffer
只需使用:
tmpArr = tmp.toBuffer