によって合計アップマップの値を、私は私が必要なものこのスカラ - 位置
var kk:scala.collection.mutable.Map[Int,Array[Int]] = Map(2 -> Array(1, 3), 1 -> Array(2, 8), 3 -> Array(4, 5))
のようなマップを持っているがnumpyの配列は追加など、位置によって合計最大値の配列で、その結果がこのArrayようにする必要があります(1 + 2 + 4、3 + 8 + 5)
によって合計アップマップの値を、私は私が必要なものこのスカラ - 位置
var kk:scala.collection.mutable.Map[Int,Array[Int]] = Map(2 -> Array(1, 3), 1 -> Array(2, 8), 3 -> Array(4, 5))
のようなマップを持っているがnumpyの配列は追加など、位置によって合計最大値の配列で、その結果がこのArrayようにする必要があります(1 + 2 + 4、3 + 8 + 5)
それとも少し短く、各「列」に.map
を適用するには、単なる配列のList
を取得するために.values
を使用して、そして.transpose
:
scala> val data = Map(2 -> Array(1, 3), 1 -> Array(2, 8), 3 -> Array(4, 5))
data: scala.collection.immutable.Map[Int,Array[Int]] = Map(2 -> Array(1, 3), 1 -> Array(2, 8), 3 -> Array(4, 5))
scala> data.values.transpose.map(_.sum)
res4: Iterable[Int] = List(7, 16)
そして、あなたが取得したい場合.toArray
を追加Array
:
scala> data.values.transpose.map(_.sum).toArray
res5: Array[Int] = Array(7, 16)
マップ上ではiterate
にマップ値の1番目と2番目の要素の別のリストを取得する必要があります。次に、fold
関数を適用します。
scala> val data = Map(2 -> Array(1, 3), 1 -> Array(2, 8), 3 -> Array(4, 5))
data: scala.collection.mutable.Map[Int,Array[Int]] = Map(2 -> Array(1, 3), 1 -> Array(2, 8), 3 -> Array(4, 5))
scala> data.map(kv => kv._2.head -> kv._2.last).foldLeft(0, 0)((a, b) => (a._1 + b._1) -> (a._2 + b._2))
res11: (Int, Int) = (7,16)
あなたは結果がArray
は、上記の結果に.productIterator.toArray
を行う明示的になりたい場合。
scala> data.map(kv => kv._2.head -> kv._2.last).foldLeft(0, 0)((a, b) => (a._1 + b._1) -> (a._2 + b._2)).productIterator.toArray
res13: Array[Any] = Array(7, 16)
@chunjefはフォーマットに感謝しています:) – Ossip