2011-07-13 11 views
5

Próbuję stworzyć wektor z tablicy podwójnej. Następnie chciałbym pomnożyć ten wektor przez macierz. Czy ktoś wie, jak mogę to osiągnąć? Poniżej znajduje się naprawdę prosty przykład, który chciałbym uzyskać.Jak mogę pomnożyć macierz przez wektor używając 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 
... 

Odpowiedz

12

Oto prosty przykład poszukiwanej pracy:

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())); 

Wynik:

[[3.0, 6.0, 9.0]] 

Innymi słowy to jest:

enter image description here

+0

To wydaje się działać idealnie - dziękuję za pomoc! –

+1

@ Jon: Zauważ, że API klasy Matrix (http://math.nist.gov/javanumerics/jama/doc/Jama/Matrix.html) jest twoim przyjacielem, aby uzyskać więcej opcji :) –

+0

Cześć! Przepraszam za bycie idiotą, ale czy mógłbyś podać nam przykład tego, co się dzieje, gdy [1 1 1] przypomina coś [2 5 3]? – Joehot200

1

Dlaczego nie można użyć arrayTimes metody Matrix? Wektor to tylko macierz 1 x n (jak sądzę), więc nie możesz zainicjować drugiej macierzy z tylko jednym wymiarem i użyć 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 

To jest to, co myślę, że będzie pracować z lektury doc.

+1

Właśnie wypróbować swój pomysł, jednak wydaje się, że chcesz, aby wymiary matrycy się zgadzały (tj. ta sama liczba wierszy i kolumn). Jednak ponieważ wektor ma tylko jeden wiersz, zgłasza wyjątek. –

+0

Ah mój błąd! Mnożenie macierzy jest trochę trudne. Nie chodzi o to, że oba wymiary muszą się zgadzać (to byłoby nudne), to tylko to, że wewnętrzne wymiary muszą się zgadzać. Nadal możesz mnożyć a i b powyżej, ale musisz transponować b. Edytowałem odpowiedź. – Ziggy

+1

To nie działa, ponieważ argumenty konstruktora nie są składnią Java ... – kiltek

Powiązane problemy