Как я могу умножить матрицу на вектор с помощью JAMA?

Я пытаюсь создать вектор из массива двойников. Затем я хочу умножить этот вектор на матрицу. Кто-нибудь знает, как я могу этого добиться? Ниже приведен очень простой пример, который я хотел бы заставить работать.

// Create the matrix (using JAMA)
Matrix a = new Matrix( [[1,2,3],[1,2,3],[1,2,3]] );

// Create a vector out of an array
...

// Multiply the vector by the matrix
...

person Community    schedule 13.07.2011    source источник


Ответы (3)


Вот простой пример требуемой операции:

double[][] array = {{1.,2.,3},{1.,2.,3.},{1.,2.,3.}}; 
Matrix a = new Matrix(array);   
Matrix b = new Matrix(new double[]{1., 1., 1.}, 1);     
Matrix c = b.times(a);  
System.out.println(Arrays.deepToString(c.getArray()));

Результат:

[[3.0, 6.0, 9.0]]

Другими словами, это:

введите здесь описание изображения

person Grzegorz Szpetkowski    schedule 13.07.2011
comment
@Jon: обратите внимание, что API класса Matrix (math.nist.gov/javanumerics /jama/doc/Jama/Matrix.html) — ваш друг, чтобы получить больше вариантов :) - person Grzegorz Szpetkowski; 13.07.2011
comment
Привет! Извините, что я идиот, но не могли бы вы привести пример того, что происходит, когда вместо [1 1 1] используется что-то вроде [2 5 3]? - person Joehot200; 12.02.2015
comment
@Joehot200: Умножение матриц довольно легко выучить самостоятельно, by-a-matrix" rel="nofollow noreferrer">this должно прояснить, как это сделать. По сути, вы умножаете строки на столбцы, затем каждый продукт суммируется и размещается соответствующим образом. - person Grzegorz Szpetkowski; 12.02.2015
comment
Верно. Понятно. Спасибо. Я не могу поверить, что я прошел весь путь к изучению синусов, косинусов, тангенсов, векторного умножения и т. Д. И все же никогда не сталкивался с умножением матрицы на вектор. - person Joehot200; 12.02.2015

Почему вы не можете использовать метод arrayTimes Matrix? Вектор - это просто матрица 1 x n (я думаю), поэтому вы не можете инициализировать вторую матрицу только с 1 измерением и использовать arrayTimes?

Matrix a = new Matrix( [[1,2,3],[1,2,3],[1,2,3]] );
Matrix b = new Matrix( [[1,2,3]] ); // this is a vector
Matrix c = a.arrayTimes(b.transpose); // transpose so that the inner dimensions agree

Я думаю, что это сработает после прочтения документа.

person Ziggy    schedule 13.07.2011
comment
Я только что опробовал вашу идею, однако, похоже, она хочет, чтобы размеры матрицы совпадали (т.е. одинаковое количество строк и столбцов). Однако, поскольку вектор имеет только одну строку, он генерирует исключение. - person ; 13.07.2011
comment
Ах, моя ошибка! Умножение матриц немного сложно. Дело не в том, что оба измерения должны согласовываться (это было бы скучно), просто должны согласовываться внутренние измерения. Вы по-прежнему можете умножать a и b выше, но вам нужно транспонировать b. Я отредактировал ответ. - person Ziggy; 14.07.2011
comment
Это не работает, потому что аргументы конструктора не являются синтаксисом Java... - person kiltek; 31.10.2014

Как насчет этого:

double[][] vals = {{1.,2.,3},{4.,5.,6.},{7.,8.,10.}};
Matrix A = new Matrix(vals);

Из http://math.nist.gov/javanumerics/jama/doc/Jama/Matrix.html

person Ishtar    schedule 13.07.2011