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
In [1]:
import numpy as np
In [2]:
arr = np.arange(10)
arr
Out[2]:
In [3]:
# Accediendo al primer elemento
arr[0]
Out[3]:
In [4]:
# Accediendo al último
arr[-1]
Out[4]:
NumPy devuelve vistas de la sección que le pidamos, no copias. Esto quiere decir que debemos prestar mucha atención a este comportamiento:
In [5]:
arr = np.arange(10)
a = arr[5:]
print(arr)
print(a)
In [6]:
arr[5] = 999
print(arr)
print(a)
Lo mismo ocurre al revés:
In [7]:
arr = np.arange(10)
a = arr[5:]
print(arr)
print(a)
In [8]:
a[-1] = 999
print(arr)
print(a)
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:
In [9]:
arr = np.arange(10)
a = arr[5:].copy()
print(arr)
print(a)
In [10]:
arr[5] = 999
print(arr)
print(a)
In [11]:
arr = np.arange(9).reshape([3, 3])
arr
Out[11]:
In [12]:
arr[0, -1]
Out[12]:
In [13]:
arr[2, 2]
Out[13]:
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:
In [14]:
M = np.arange(36, dtype=float).reshape(4, 9)
M
Out[14]:
In [15]:
# De la segunda a la tercera fila, incluida
M[1:3]
Out[15]:
In [16]:
# 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
Out[16]:
Pintar un tablero de ajedrez usando la función plt.matshow
.
In [17]:
tablero = np.zeros([8, 8], dtype=int)
tablero[0::2, 1::2] = 1
tablero[1::2, 0::2] = 1
tablero
Out[17]:
In [18]:
%matplotlib inline
import matplotlib.pyplot as plt
plt.matshow(tablero, cmap=plt.cm.gray_r)
Out[18]:
Hemos aprendido:
¡Quiero más!Algunos enlaces:
Algunos enlaces en Pybonacci:
Algunos enlaces en otros sitios: