Apache Commons Math: как выполнить суммирование по строкам / столбцам? - PullRequest
0 голосов
/ 02 сентября 2018

Я довольно новичок в Apache Common Math, поэтому прошу прощения за тривиальные вопросы.

На основе API doc я не могу понять, как выполнить сумму по столбцам или по строкам.

import org.apache.commons.math3.linear.RealMatrix;
import org.apache.commons.math3.linear.MatrixUtils;

double[][] values = {{1.0, 2.0}, {3.0, 4.0}, {5.0, 6.0}};
RealMatrix mtx = MatrixUtils.createRealMatrix(values);

Приведенный выше код генерирует матрицу, подобную следующей:

[[1, 2],
 [3, 4],
 [5, 6]]

Какой правильный синтаксис для вычисления суммы по столбцам? Что дало бы мне:

[9, 12]

А как мне выполнить построчную сумму? Что дало бы мне:

[3,
 7,
 11
]

Для сравнения ниже приведен синтаксис в библиотеке Scala Breeze:

import breeze.linalg._
val mtx = DenseMatrix((1.0, 2.0), (3.0, 4.0), (5.0, 6.0))

// sum along the column direction
sum(mtx(::, *))
// Transpose(DenseVector(9.0, 12.0))


// sum along the row direction
sum(mtx(*, ::))
// DenseVector(3.0, 7.0, 11.0)

1 Ответ

0 голосов
/ 02 сентября 2018

Кажется, что не существует простого метода для достижения этого, как насчет генерации единицы матрицы для выполнения суммы ?, например:

//get the row sums
mtx.multiply(MatrixUtils.createRealMatrix(new double[][]{{1}, {1}}))
> Array2DRowRealMatrix{{3.0},{7.0},{11.0}}
//get the column sums
MatrixUtils.createRealMatrix(new double[][]{{1, 1, 1}}).multiply(mtx)
> Array2DRowRealMatrix{{9.0,12.0}}
...