Autor
|
Tema: Suma de columnas de matriz mxn (Leído 18,578 veces)
|
~H~
Desconectado
Mensajes: 22
|
El método sum tiene un parámetro (mat) que es una array bidimensional de elementos de tipo float. El parámetro mat representa una matriz de n x m elementos. Complete el método para que devuelva un array monodimensional de m elementos de tipo de tipo float que represente la suma vectorial de las n filas de la matriz mat. La suma de n vectores es un nuevo vector en el que cada elemento es igual a la suma de los elementos que ocupan la misma posición en los vectores que se suman. Ejemplo: 1 2 3 4 0 1 1 2 2 3 1 1 resultado 3 6 5 7 Bueno yo lo he echo así, pero en concreto lo que no entiendo es esto float[] myArray = new float [mat[0].length]; lo de mat[0].length significa que declaro ese array y tiene la longuitud de la primera dimensión en 0?? Esque eso no lo entiendo si alguien sabe explicarlo bien y de una manera sencilla que me lo diga porfavor. public class Excercise { public static float[] sum(float[][] mat) { float[] myArray = new float [mat[0].length]; for(int i = 0; i < mat[0].length; i++){ float suma = 0; for(int j = 0; j < mat.length; j++){ suma += mat[j][i]; } myArray[i] = suma; } return myArray; } }
|
|
« Última modificación: 14 Octubre 2013, 00:43 am por Handelson »
|
En línea
|
|
|
|
ThinkByYourself
Desconectado
Mensajes: 191
|
Efectivamente, estás declarando que la longitud de myArray es la misma que la longitud del primer (y último, y la de los del medio igual) array metido como argumento al método (o sea la longitud del primer array de arrays), o, en otras palabras, estás diciendo que la solución tendrá el mismo número de dígitos que el primer número de la suma (y el último, y todos los que haya en medio). Pues que si tú vas a querer sumar 1582 9856 555550, en realidad tendrás: 001582 009856 555550 Y tu resultado tendrá que tener tantos dígitos como dígitos cualquiera de los números de la suma, afirmación no necesariamente cierta. No es necesariamente cierto porque suele pasar que una suma tenga más dígitos que los... "sumandos?", bueno no sé, pero con un 5+5 tu programa tendría conflictos. Ah, y no entiendo porque usas float si en el caso expuesto sólo hay enteros. Ah, y también he supuesto que en cada índice de array va a haber solamente 1 cifra, y quizá no debiera.... pero bueno, espero que lo hayas entendido un poco más. Espero que te haya servido la respuesta. Eeeeeenga ahí esos estudios PD: también puede ser que no haya entendido nada... pro weno.
|
|
« Última modificación: 15 Octubre 2013, 00:39 am por NoBullshit »
|
En línea
|
No te voy a engañar. Todos hemos sido programados para normalizar la psicopatía de las élites económicas y políticas, y para realimentar su patrón de ciega codicia.
|
|
|
Mitsu
|
Complementando la respuesta de NoBullShit, primero, te dejo un code de ejemplo: import javax.swing.SwingUtilities; public class SumaMatrizToArray { double[][] matriz = {{4.5,34.6,19,75},{6.5,8.4,9.1},{11.55,9.52,23.50}}; public SumaMatrizToArray(){ double[] sumaElementosMatriz = getSumaFilasMatriz(matriz); System. out. println("Suma de las filas de la matriz en un array:\n\n"); for(short indice=0; indice<sumaElementosMatriz.length; indice++) { System. out. println("Suma n° "+(indice +1)+":\t"+sumaElementosMatriz [indice ]); } } public static double[] getSumaFilasMatriz(double[][] matriz){ double[] sumaFilasMatriz = new double[matriz.length]; // longitud array = #filas de la matriz // inicializa los elementos del array for(int indice=0; indice<sumaFilasMatriz.length; indice++) { sumaFilasMatriz[indice] = 0; } // recorre la matriz. La suma de los elementos de cada fila // la guarda en una posicion del array for(short fila=0; fila<matriz.length; fila++) { for(short columna=0; columna<matriz[fila].length; columna++) { sumaFilasMatriz[fila] += matriz[fila][columna]; } } return sumaFilasMatriz; } public static void main (String... args){ @Override public void run(){ new SumaMatrizToArray(); } }); } }
Veamos el método getSumaFilasMatriz(doube[][] matriz): // inicializa los elementos del array for(int indice=0; indice<sumaFilasMatriz.length; indice++) { sumaFilasMatriz[indice] = 0; }
Este loop, lo que hace es inicializar todos los elementos de nuestro array que contendrá la sumatoria de las filas de la matriz, en 0. Lo inicializamos en 0, porque en otro loop en donde almacenaremos las sumatorias de las filas de la matriz, en este array; utilizaremos: sumaFilasMatriz[fila] += matriz[fila][columna];
Si hicieramos esto sin inicializar el arreglo sumaFilasMatriz, simplemente nos tiraría un hermoso NullPointerException, que explicado, significa, que se está queriendo acceder a un valor que no existe, es decir, un valor null. Por defecto todo objeto sin incializar, tiene el valor null.
Ahora, solo falta almacenar las sumas de las filas de la matriz, en una determinada posición de nuestro array: // recorre la matriz. La suma de los elementos de cada fila // la guarda en una posicion del array for(short fila=0; fila<matriz.length; fila++) { for(short columna=0; columna<matriz[fila].length; columna++) { sumaFilasMatriz[fila] += matriz[fila][columna]; } } return sumaFilasMatriz; }
Nota: usamos el operador += para que en cada iteración del bucle interno, se sume la columna actual de la matriz, a la suma que ya se tiene en la posición[fila] del array.
|
|
« Última modificación: 16 Octubre 2013, 23:57 pm por JavaBrain »
|
En línea
|
|
|
|
~H~
Desconectado
Mensajes: 22
|
Gracias ya entendí todo el código, sólo tenía la duda de que significaba mat[0].length, ahora que se que devuelve el número de columnas de la primera fila ya lo entiendo todo, gracias por las explicaciones.
|
|
|
En línea
|
|
|
|
zonahurbana
Desconectado
Mensajes: 178
RS, JC.
|
Gracias ya entendí todo el código, sólo tenía la duda de que significaba mat[0].length, ahora que se que devuelve el número de columnas de la primera fila ya lo entiendo todo, gracias por las explicaciones.
Es decir, ¿sería lo mismo si se usará mat[1], mat[2] u otro número siempre que no se exceda mat.length-1? Ya que, mat.length es la cantidad de filas de la matriz, ¿verdad?
|
|
|
En línea
|
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
|
|
|
~H~
Desconectado
Mensajes: 22
|
Es decir, ¿sería lo mismo si se usará mat[1], mat[2] u otro número siempre que no se exceda mat.length-1? Ya que, mat.length es la cantidad de filas de la matriz, ¿verdad?
No entiendo muy bien tu pregunta, mat.length es la cantidad de filas de la "matriz", sí, pero eso es un método, se supone que esta diseñado para que funcione sean los valores que sean los de las filas y las columnas. Es decir funciona para valores cualesquiera que le pases tú desde la clase principal main por teclado, claro que habría que crear la clase main
|
|
« Última modificación: 19 Octubre 2013, 22:36 pm por ~H~ »
|
En línea
|
|
|
|
zonahurbana
Desconectado
Mensajes: 178
RS, JC.
|
mat.length devolvería la cantidad de filas de una matriz bidimensional mat, y la cantidad de elementos si se tratase de un vector. mat[0].length devuelve la cantidad de elementos de la fila 0 de la matriz mat, es decir, la cantidad de columnas de mat. Yo preguntaba si es lo mismo usar mat[0], mat[1], y así con cualquier mat donde i<mat.length
Es que, hasta antes, yo sólo había visto vectores. Y pensaba que para matrices existía algo como mat.height para las columnas
|
|
|
En línea
|
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
|
|
|
Mitsu
|
No hay por qué confundirse. Sea conjunto una matriz de 3 x 3:
Supongamos que queremos saber cuantas filas tiene dicha matriz: int cantidad_filas = conjunto.length;
Ahora, queremos saber cuántas columnas tiene la fila 2: int cantidad_columnas = conjunto[1].length; // pongo 1 porque la primera fila es 0
Generalmente arrays sean unidimensionales o bidimensionales, no se usan a la hora de desarrollar. Se usan Colecciones. Dirán por qué, bueno, una de las grandes razones es que cuando usamos arreglos, debemos saber de antemano cuantos elementos tendrá dicho arreglo, pero supongamos que vamos a recuperar datos, pero no sabemos con exactitud cuántos valores va a devolver. Entonces, en estos casos se usa una colección. Esta puede ser una Lista, un ArrayList, LinkedList, Map, HashMap, etc. Una colección no tiene un tamaño límite, está prácticamente limitado por la memoria del ordenador, lo cual es una ventaja. Además en una ArrayList - por ejemplo -, podemos guardar distintos tipos de datos, podemos guardar TODO. Si ven el método add de ArrayList, verán que recibe un Object, y como saben, todo en Java hereda de Object. También podemos asegurarnos que una colección sea de un tipo especificado, utilizando Generics, pero ese es otro tema.
|
|
« Última modificación: 20 Octubre 2013, 00:16 am por JavaBrain »
|
En línea
|
|
|
|
~H~
Desconectado
Mensajes: 22
|
Muchas gracias por la explicación!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
matriz suma de columnas"problema con una sentencia y ciclo for"
Programación C/C++
|
lala.pff
|
1
|
4,341
|
2 Abril 2011, 18:37 pm
por lala.pff
|
|
|
Suma de matriz + matriz invertida
Programación C/C++
|
sora_ori
|
3
|
3,324
|
16 Enero 2014, 16:35 pm
por leosansan
|
|
|
Duda sencilla sobre suma de columnas en matriz de 2 dimensiones.
Ejercicios
|
bastri
|
2
|
3,645
|
20 Julio 2015, 07:50 am
por bastri
|
|
|
Suma de filas y columnas de una matriz en C
Programación C/C++
|
estudiante_1
|
1
|
20,728
|
30 Diciembre 2015, 22:19 pm
por MAFUS
|
|
|
Suma de filas y columnas de una matriz
.NET (C#, VB.NET, ASP)
|
Ahinoam
|
2
|
9,166
|
15 Diciembre 2016, 23:59 pm
por Ahinoam
|
|