#!/usr/bin/python
# -*- coding: utf-8 -*-


# importamos la librerIa numpy, y le damos como nombre np dentro del programa
import numpy as np


print("- Matriz creada con una lista de listas:")
lista_de_listas = [[1, -4], [12, 3], [7.2, 5]]
matriz = np.array(lista_de_listas)
print(matriz)


print("- Matriz creada con np.zeros:")
dimensiones = (2, 3)
matriz_ceros = np.zeros(dimensiones)
print(matriz_ceros)


print("- Matriz creada con np.ones:")
dimensiones = (3, 2)
matriz_unos = np.ones(dimensiones)
print(matriz_unos)

# tambiEn podemos usar np.copy para copiar una matriz
print("- Copia de la matriz creada con np.ones:")
matriz_unos_copia = np.copy(matriz_unos)
print(matriz_unos_copia)


a = np.array(lista_de_listas)

print("Elementos individuales")
print(a[0, 1])
print(a[2, 1])

print("Vector de elementos de la fila 1")
print(a[1, :])

print("Vector de elementos de la columna 0")
print(a[:, 0])

print("Submatriz de 2x2 con las primeras dos filas")
print(a[0:2, :])

print("Submatriz de 2x2 con las ultimas dos filas")
print(a[1:3, :])


print("- Matriz original:")
print(a)

print("- Le asignamos el valor 4 a los elementos de la columna 0:")
a[:, 0] = 4
print(a)


print("- Dividimos por 3 la columna 1:")
a[:, 1] = a[:, 1] / 3.0
print(a)

print("- Multiplicamos por 5 la fila 1:")
a[1, :] = a[1, :] * 5
print(a)

print("- Le sumamos 1 a toda la matriz:")
a = a + 1
print(a)


# La siguiente linea crea una matriz aleatoria de 5 por 5 con valores entre 0 y 1
matriz_aleatoria = np.random.rand(5, 5)
print(matriz_aleatoria)


# crea 2x3 array lleno con 7's:
a = np.full((2, 3), 7, int)
print(a)


from numpy import linalg

print("Inversa")
lista_de_listas = [[4, 3, 0], [3, 4, -1], [0, -1, 4]]
matriz = np.array(lista_de_listas)
inv1 = linalg.pinv(matriz)
print(matriz)
inv1 = np.linalg.pinv(matriz)  # piv2
print(inv1)
inv2 = np.linalg.inv(matriz)
print(inv2)
