При использовании бриз-матриц вы можете использовать +
для поэлементного сложения двух разных матриц. Это означает, что единственное, что вам нужно сделать, это сложить все матрицы вместе, а затем разделить на количество матриц. Это можно сделать следующим образом:
import breeze.linalg.DenseMatrix
val arr = Array(new DenseMatrix(2, 2, Array(1.0,2,2,3)),
new DenseMatrix(2, 2, Array(1.0,3,1,1)),
new DenseMatrix(2, 2, Array(2.0,4,3,1)))
val dm: DenseMatrix = arr.reduce(_ + _).map(_ / arr.length)
Полученная матрица будет иметь среднее значение для тех же ячеек.
Это также возможно при использовании Spark и матрицы ml.linalg.DenseMatrix
, однако это немного сложнее, поскольку нет простого добавления.
val numCols = arr.head.numCols
val numRows = arr.head.numRows
val values = arr.map(_.values)
.reduce((_, _).zipped.map(_ + _))
.map(_ / arr.length)
val dm = new DenseMatrix(numCols, numRows, values)