Вычесть матрицу 1 x M из матрицы N x M в ejml

Предполагая 1 x M (A) и N x M (B) объекты SimpleMatrix в ejml, есть ли простой способ вычесть A из B? Я искал способ повторить ряды A, чтобы они были размером B, но не нашел способ сделать это легко.

SimpleMatrix A = new SimpleMatrix(1, 2);
SimpleMatrix B = new SimpleMatrix(2, 2);

A.set(1.0);

B.setRow(0, 0, 2.0, 2.0);
B.setRow(1, 0, 4.0, 4.0);

// Throws java.lang.IllegalArgumentException
// The 'a' and 'b' matrices do not have compatible dimensions
SimpleMatrix C = B.minus(A);

// Expecting
// 1 1
// 3 3

Многие ответы с использованием Matlab (здесь и здесь ), но я не смог найти простого синтаксиса для ejml.


person grovduck    schedule 17.01.2018    source источник


Ответы (1)


Согласно документам:

Будет объединять A и B по их столбцам, а затем объединять результат с C по их строкам. [А,Б;С]

Таким образом, вы можете определить уравнение, которое будет строить матрицу из повторяющихся строк с подобным (я не знаю N значение матрицы B):

A.equation("A = [A,A,A]")

or

A.equation("A = [A,A,A]", "A")

Другой вариант — использовать SimpleBase.concatColumns(SimpleBase...), это выглядит так:

A = A.concatColumns(A,A)

Предполагая, что A равно 1xM, он создаст матрицу 3xM и сохранит ее в A. Если вы хотите построить такой массив динамически, вы можете просто соединить "A" N раз (конечно, без завершающей запятой) или передать матрицу N - 1 раз A в функцию.

ОБНОВЛЕНИЕ

Извините, уже поздно. Я ошибочно предположил, что A является вектором-строкой, так как это вектор-столбец, использующий запятые вместо точек с запятой, как описано в документах.

person Jakub Licznerski    schedule 17.01.2018
comment
Большое спасибо. Я предполагаю, что вы имеете в виду запятую вместо двоеточия в своем ответе (для конкатенации строк). Я удивлен, что для этого вам нужно использовать уравнение - я бы подумал, что есть какой-то метод повторения. - person grovduck; 17.01.2018
comment
ооооооооооооооооооооооооооооооооооооооооооооооооо! есть методы concatRows и concatColumns, но определенные для SimpleBase (суперкласс для SimpleMatrix), поэтому я не заметил их с первого взгляда... Я соответствующим образом обновлю свой ответ - person Jakub Licznerski; 17.01.2018