Obtener una matriz desde un fichero de texto en Octave

Obtener una matriz desde un fichero de texto en Octave es sencillísimo.

Por ejemplo, aquí tenemos una matriz almacenada en datos.txt:

1 2 3 4 5 6 7 8 9 10 11 12
13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36

Para leer esa matriz sólo hace falta este comando:

M = load('datos.txt');

Y comprobamos con disp(M) o simplemente M:

captura

Leer más » 1 Comentario

Intercambiar la primera columna con la última de una matriz – Curso Octave

NOTA: este tutorial es parte del curso de Octave de Linux Hispano.

De nuevo, os voy a proponer un pequeño ejercicio a resolver. Más adelante tenéis la solución pero en un principio me gustaría que lo intentáseis por vosotros mismos.

La cuestión es cómo intercambiar la primera columna de una matriz con la última columna de esa misma matriz.

Ésta es la matriz A para trabajar:

Leer más » 4 Comentarios

Eliminar una fila o una columna de una matriz – Curso Octave

NOTA: este tutorial es parte del curso de Octave de Linux Hispano.

Esta vez os voy a proponer un pequeño ejercicio a resolver. Más adelante tenéis la solución pero en un principio me gustaría que lo intentáseis por vosotros mismos.

La cuestión es cómo eliminar una fila o una columna de una matriz en Octave.

Ésta es la matriz A para trabajar:

Leer más » 2 Comentarios

Reservar memoria dinámica para una matriz en C

Acabamos de hablar hace nada de cómo reservar memoria para un vector unidimensional de forma dinámica con C. Hoy le toca el turno a las matrices o arrays bidimensionales. Los vectores se organizan de forma lineal, secuencial y con todos los elementos en posiciones correlativas en la memoria. Las matrices se almacenan en forma de vector de vectores.

Dimensiones fijas

Si es de dimensiones fijas (declarándolas como matriz[filas][columnas]), el vector de vectores se guardará también uno al lado del otro.

Por lo tanto, en una matriz del tipo:

a00a01a02
a10a11a12
a20a21a22

En memoria (en la que los elementos los direccionamos en una sola dirección) los tendríamos de la siguiente forma (en cada lenguaje este criterio cambia, en Fotran se almacena en forma de vector de columnas):

a00a01a02a10a11a12a20a21a22

Dimensiones variables

Sin embargo, en el caso de la memoria dinámica, las cosas cambian. El mecanismo será el siguiente:

  • Declararemos un doble puntero “matriz” sobre el que reservaremos memoria para tantas filas tengamos.
  • Recorreremos el vector recién creado para reservar memoria para las columnas de cada fila.

Hay dos detalles a tener en cuenta:

  • La variable “matriz” será del tipo doble puntero ya que hará referencia a un vector de punteros.
  • Cada fila sí estará almacenada de forma consecutiva en memoria, pero éstas a su vez no estarán de forma obligada juntas, aunque podremos seguir accediendo de la misma forma.

Veamos un ejemplo con código real (no hace comprobaciones de que el malloc se ejecute correctamente):

#include <stdlib.h> #include <stdio.h> int main(void) { int filas = 2; int columnas = 3; int **x; int i; // Recorre filas int j; // Recorre columnas // Reserva de Memoria x = (int **)malloc(filas*sizeof(int*)); for (i=0;i<filas;i++) x[i] = (int*)malloc(columnas*sizeof(int)); // Damos Valores a la Matriz x[0][0] = 1; x[0][1] = 2; x[0][2] = 3; x[1][0] = 4; x[1][1] = 5; x[1][2] = 6; // Dibujamos la Matriz en pantalla for (i=0; i<filas; i++) { printf("\n"); for (j=0; j<columnas; j++) printf("\t%d", x[i][j] ); } return 0; } read more

Leer más » 16 Comentarios