import numpy as np

"""
Explanation: Secciones de arrays
Hasta ahora sabemos cómo crear arrays y realizar algunas operaciones con ellos, sin embargo, todavía no hemos aprendido cómo acceder a elementos concretos del array
End of explanation
"""


arr = np.arange(10)
arr

# Accediendo al primer elemento
arr[0] 

# Accediendo al último
arr[-1]

"""
Explanation: Arrays de una dimensión
End of explanation
"""


arr = np.arange(10)
a = arr[5:]

print(arr)
print(a)

arr[5] = 999

print(arr)
print(a)

"""
Explanation: ¡Atención!
NumPy devuelve vistas de la sección que le pidamos, no copias. Esto quiere decir que debemos prestar mucha atención a este comportamiento:
End of explanation
"""


arr = np.arange(10)
a = arr[5:]

print(arr)
print(a)

a[-1] = 999

print(arr)
print(a)

"""
Explanation: Lo mismo ocurre al revés:
End of explanation
"""


arr = np.arange(10)
a = arr[5:].copy()

print(arr)
print(a)

arr[5] = 999

print(arr)
print(a)

"""
Explanation: a apunta a las direcciones de memoria donde están guardados los elementos del array arr que hemos seleccionado, no copia sus valores, a menos que explícitamente hagamos:
End of explanation
"""


arr = np.arange(9).reshape([3, 3])
arr

arr[0, -1]

arr[2, 2]

"""
Explanation: Arrays de dos dimensiones
End of explanation
"""


M = np.arange(36, dtype=float).reshape(4, 9)
M

# De la segunda a la tercera fila, incluida
M[1:3]

# Hasta la tercera fila sin incluir y de la segunda a la quinta columnas saltando dos
M[:2, 1:5:2]
#M[1:2:1, 1:5:2]  # Equivalente

"""
Explanation: Secciones de arrays
Hasta ahora hemos visto cómo acceder a elementos aislados del array, pero la potencia de NumPy está en poder acceder a secciones enteras. Para ello se usa la sintaxis inicio:final:paso: si alguno de estos valores no se pone toma un valor por defecto. Veamos ejemplos:
End of explanation
"""


tablero = np.zeros([8, 8], dtype=int)

tablero[0::2, 1::2] = 1
tablero[1::2, 0::2] = 1

tablero

%matplotlib inline
import matplotlib.pyplot as plt

plt.matshow(tablero, cmap=plt.cm.gray_r)

"""
Explanation: Ejercicio
Pintar un tablero de ajedrez usando la función plt.matshow.
End of explanation
"""


