2011-07-13 22 views
5

Estoy tratando de crear un vector a partir de una matriz de dobles. Entonces quiero multiplicar este vector por una matriz. ¿Alguien sabe cómo puedo lograr esto? A continuación se muestra un ejemplo realmente simple que me gustaría poner en práctica.¿Cómo puedo multiplicar una matriz por un vector usando 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 
... 

Respuesta

12

aquí es simple ejemplo de funcionamiento deseado:

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

Resultado:

[[3.0, 6.0, 9.0]] 

En otras palabras, que es:

enter image description here

+0

Esto parece funcionar perfectamente, ¡gracias por su ayuda! –

+1

@Jon: tenga en cuenta que la API de clase 'Matrix' (http://math.nist.gov/javanumerics/jama/doc/Jama/Matrix.html) es su amigo para obtener más opciones :) –

+0

¡Hola! Perdón por ser un idiota, pero ¿podrías darnos un ejemplo de lo que sucede cuando [1 1 1] es algo así como [2 5 3]? – Joehot200

1

¿Por qué no se puede utilizar el método arrayTimes de Matrix? Un vector es solo una matriz de 1 x n (creo), así que ¿no puedes inicializar una segunda matriz con solo 1 dimensión y usar 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 

Esto es lo que creo que funcionaría de la lectura de la doc.

+1

Sólo traté a cabo su idea, sin embargo parece querer que las dimensiones de la matriz estén de acuerdo (es decir, el mismo número de filas y columnas). Sin embargo, dado que el vector solo tiene una fila, arroja una excepción. –

+0

¡Ah, error mío! Multiplicar matrices es un poco complicado. No es que ambas dimensiones tengan que estar de acuerdo (eso sería aburrido) sino que las dimensiones internas tienen que estar de acuerdo. Todavía puedes multiplicar a y b arriba, pero necesitas transponer b. He editado la respuesta. – Ziggy

+1

Esto no funciona porque los argumentos del constructor no son sintaxis Java ... – kiltek

Cuestiones relacionadas