extraer un vector de una matriz

Iniciado por pastyto, 20 Enero 2012, 00:46 AM

0 Miembros y 1 Visitante están viendo este tema.

pastyto

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.

soyloqbuskas

¡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.


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.
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

pastyto

#2
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 ...

rir3760

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 (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <vector>
using std::vector;

int main()
{
vector<vector<int> > mat(10);
typedef vector<vector<int> >::size_type vvi_size;
typedef vector<int>::size_type vi_size;

for (vvi_size i = 0; i != mat.size(); ++i){
mat[i].resize(10);

for (vi_size j = 0; j != mat[i].size(); ++j)
mat[i][j] = j;
}

for (vvi_size i = 0; i != mat.size(); ++i){
for (vi_size j = 0; j != mat[i].size(); ++j)
cout << ' ' << mat[i][j];
cout << endl;
}
cout << "----" << endl;

// Creamos el nuevo vector
vector<vector<int> > nuevo(10);
// Iteramos por cada elemento (fila)
for (vvi_size i = 0; i != nuevo.size(); ++i)
// Asignamos los elementos requeridos del vector original (mat)
nuevo[i].assign(mat[i].begin(), mat[i].end() - 4);

// Impresion de prueba
for (vvi_size i = 0; i != nuevo.size(); ++i){
for (vi_size j = 0; j != nuevo[i].size(); ++j)
cout << ' ' << nuevo[i][j];
cout << endl;
}

return 0;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

pastyto