sábado, septiembre 04, 2021

Un poco de matrices en Octave y Python

 Crear matrices en Octave es relativamente fácil, solo hay que delimitar los elementos que la conforman entre paréntesis cuadrados. Los elementos de un renglón se separan por espacios, y los renglones se separan utilizando punto y coma (;).

    Por ejemplo, para un vector de cinco elementos, en Octave se define de la siguiente manera:

x = [1.1 2.1 3.1 4.1 5.1]

    Y para una matriz de 3x4, se define:

A = [1.1 2.1 3.1 4.1; 5.1 6.1 7.1 8.1; 9.1 10.1 11.1 12.1]

mostrando lo siguiente:

A =

    1.1000    2.1000    3.1000    4.1000

    5.1000    6.1000    7.1000    8.1000

    9.1000   10.1000   11.1000   12.1000

    Se pueden concatenar vectores y matrices para crear matrices más grandes.

    Por ejemplo, dado el siguiente vector:

x = [1 2 3]

    Se puede construir la siguiente matriz a partir de concatenar x varias veces:

A = [x; x; x]

dando como resultado:

A =

   1   2   3

   1   2   3

   1   2   3

    Si definimos el vector "y" de la siguiente forma:

y = [1; 2; 3]

y se concatena el vector y varias veces para crear una matriz de la siguiente forma:

B = [y y y]

da como resultado:

B =

   1   1   1

   2   2   2

   3   3   3

 Podemos usar las matrices A y B para construir una matriz más grande.

C = [A 2*A; B [1 0 0; 0 1 0; 0 0 1]]

dando como resultado:

C =

   1   2   3   2   4   6

   1   2   3   2   4   6

   1   2   3   2   4   6

   1   1   1   1   0   0

   2   2   2   0   1   0

   3   3   3   0   0   1


    Para realizar la misma tarea en Python requiere más pasos, empezando por importar el paquete Numpy. 

import numpy as np

    Para definir el vector "x":

x = np.array([1.1, 2.1, 3.1, 4.1, 5.1])

    Y para definir la matriz ejemplo anterior en Python:

A = np.array([[1.1, 2.1, 3.1, 4.1], [5.1, 6.1, 7.1, 8.1], [9.1, 10.1, 11.1, 12.1]])

que devuelve:

array([[ 1.1,  2.1,  3.1,  4.1],

       [ 5.1,  6.1,  7.1,  8.1],

       [ 9.1, 10.1, 11.1, 12.1]])

    En Python para concatenar arreglos Numpy se usa el método concatenate, por lo que a partir del vector "x" definido de la siguiente forma:

x = np.array([[1, 2, 3]])

crear una matriz A de la siguiente forma:

A = np.concatenate((x, x, x))

da como resultado lo siguiente:

array([[1, 2, 3],

       [1, 2, 3],

       [1, 2, 3]])

    Para este ejemplo es importante notar que el vector x en realidad es una matriz Numpy de un único renglon y es importante porque en Python y Numpy no es lo mismo concatenar vectores que concatenar matrices.

Para el vector "y" utilizado previamente, definido de la siguiente forma:

y = np.array([[1],[2],[3]])

al concatenarlo de la siguiente forma:

B = np.concatenate((y,y,y), axis=1) 

se obtiene:

array([[1, 1, 1],

       [2, 2, 2],

       [3, 3, 3]])

En este ejemplo es importante notar que se usó el argumento axis, para indicar que se concatene a la derecha y no hacia abajo.

    Finalmente utilizando ambas matrices resultantes A y B al concatenarlas de la siguiente forma:

C1 = np.concatenate((A, 2*A), axis=1)

C2 = np.concatenate((B,[[1, 0, 0], [0, 1, 0], [0, 0, 1]]), axis = 1)

C = np.concatenate((C1, C2)) 

se obtiene:

 print(C)                                                               

[[1 2 3 2 4 6]

 [1 2 3 2 4 6]

 [1 2 3 2 4 6]

 [1 1 1 1 0 0]

 [2 2 2 0 1 0]

 [3 3 3 0 0 1]]

Obteniendo desde Python, resultados equivalentes a los vistos en Octave.

Etiquetas: ,

0 Comentarios:

Publicar un comentario

Suscribirse a Comentarios de la entrada [Atom]

<< Página Principal