Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: pastyto en 20 Enero 2012, 00:46 am



Título: extraer un vector de una matriz
Publicado por: pastyto en 20 Enero 2012, 00:46 am
Hola a todos

Por favor necesito su ayuda ... tengo una matriz que es leida desde un archivo txt y quiero de esa matriz de mxn sacar las ultimas n-4 columnas  y llamarla como otra matriz.


Título: Re: extraer un vector de una matriz
Publicado por: soyloqbuskas en 20 Enero 2012, 00:57 am
¡Buenas pastyto!

Para hacer eso, necesitas crearte una matriz N-4xN. Una vez creada debes rellenarla con los valores de la matriz original. Asi que necesitas recorrer la matriz original con 2 bucles for() y cojer el valor y ponerlo en la matriz nueva.

Código:
for(i=0;i<n-4;i++){
    for(j=0;j<n;j++){
           //cojer valor y poner en la matriz nueva en la posicion (i,j)
    }
}

Espero haberte servido de ayuda, un saludo.


Título: Re: extraer un vector de una matriz
Publicado por: pastyto en 20 Enero 2012, 01:01 am
gracias

y para escribir la nueva matriz puedo poner asi ???

T_Part[j]=Datos[j];

de la matriz Datos es de donde saco las columnas que quiero y quiero que se almacenen en la matriz T_Part....

soy nueva en programacion ... gracias

EI: juntando mensajes.

estaria bien ponerle asi ??? porque no corre ...

    vector<vector<double> > Datos;
    vector<vector<double> > T_Part;
    Datos=leer_archivo("matriz_1.txt");
    escribir_archivo("matriz_original.txt",Datos); // esta funcion ya esta creada
   
    for (int i=0;i<Datos.size()-3;i++)
    {
        for (int j=0;j<Datos.size();j++)
        {
        T_Part[j]=Datos[j];
        }
    }
    escribir_archivo("partidos.txt",T_Part);

y no funciona ...


Título: Re: extraer un vector de una matriz
Publicado por: rir3760 en 22 Enero 2012, 04:48 am
Pensandolo un poco no es claro si quieres crear una matriz en base a otra consistiendo de:

A) Todas las columnas menos las ultimas cuatro.
B) Solo las ultimas cuatro columnas.

Otro problema es que usualmente se almacena la informacion en filas y columnas (no al reves: columnas y filas).

En el caso usual con filas primero y columnas despues, utilizando la clase vector de C++ puedes:

1) Crear el nuevo vector
2) Utilizas por cada uno de los elementos del vector la funcion miembro "assign" para el reajuste del tamaño y copia de valores.

Un programa de ejemplo relativamente largo, la mayoria solo es "fluf" (creacion y asignacion de valores a la matriz), la parte importante donde se muestra el proceso de copia esta comentado.

Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include <vector>
  7. using std::vector;
  8.  
  9. int main()
  10. {
  11. vector<vector<int> > mat(10);
  12. typedef vector<vector<int> >::size_type vvi_size;
  13. typedef vector<int>::size_type vi_size;
  14.  
  15. for (vvi_size i = 0; i != mat.size(); ++i){
  16. mat[i].resize(10);
  17.  
  18. for (vi_size j = 0; j != mat[i].size(); ++j)
  19. mat[i][j] = j;
  20. }
  21.  
  22. for (vvi_size i = 0; i != mat.size(); ++i){
  23. for (vi_size j = 0; j != mat[i].size(); ++j)
  24. cout << ' ' << mat[i][j];
  25. cout << endl;
  26. }
  27. cout << "----" << endl;
  28.  
  29. // Creamos el nuevo vector
  30. vector<vector<int> > nuevo(10);
  31. // Iteramos por cada elemento (fila)
  32. for (vvi_size i = 0; i != nuevo.size(); ++i)
  33. // Asignamos los elementos requeridos del vector original (mat)
  34. nuevo[i].assign(mat[i].begin(), mat[i].end() - 4);
  35.  
  36. // Impresion de prueba
  37. for (vvi_size i = 0; i != nuevo.size(); ++i){
  38. for (vi_size j = 0; j != nuevo[i].size(); ++j)
  39. cout << ' ' << nuevo[i][j];
  40. cout << endl;
  41. }
  42.  
  43. return 0;
  44. }

Un saludo


Título: Re: extraer un vector de una matriz
Publicado por: pastyto en 22 Enero 2012, 05:40 am
mil gracias .... besos