35  Slicing y fancy indexing en NumPy

¿Listes para sumergirse en las técnicas de slicing y fancy slicing en NumPy? En esta sesión, descubriremos cómo el slicing nos permite acceder a segmentos específicos de arreglos de forma eficiente y cómo el fancy slicing nos abre las puertas a patrones más elaborados y complejos dentro de los arreglos. Estas técnicas son esenciales para la extracción flexible de datos, cruciales en campos como análisis de datos, ciencia de datos y machine learning.

Exploraremos cómo el slicing facilita la selección de segmentos de arreglos de manera intuitiva y eficaz, mientras que el fancy slicing nos equipa para manejar patrones más intrincados. Te guiaremos a través de estas técnicas avanzadas, que te empoderarán para extraer información valiosa de tus arreglos con gran flexibilidad y precisión.

import numpy as np
f = "../data/m10x10_int.txt"
m = np.loadtxt(f)
m
array([[6., 0., 8., 5., 2., 0., 5., 7., 9., 3.],
       [7., 3., 1., 8., 6., 0., 6., 2., 7., 2.],
       [7., 6., 3., 5., 5., 0., 5., 8., 5., 5.],
       [7., 3., 3., 9., 3., 3., 8., 1., 9., 7.],
       [0., 3., 0., 7., 0., 4., 3., 7., 4., 9.],
       [4., 8., 8., 3., 7., 4., 5., 7., 4., 3.],
       [2., 6., 6., 8., 9., 9., 7., 9., 6., 5.],
       [4., 9., 9., 9., 1., 8., 6., 9., 8., 9.],
       [5., 8., 6., 8., 4., 8., 2., 7., 8., 7.],
       [5., 8., 5., 7., 7., 3., 4., 3., 5., 6.]])
m.shape
(10, 10)

image-3.png
m[:2]
array([[6., 0., 8., 5., 2., 0., 5., 7., 9., 3.],
       [7., 3., 1., 8., 6., 0., 6., 2., 7., 2.]])

image-2.png
m[:8,:]
array([[6., 0., 8., 5., 2., 0., 5., 7., 9., 3.],
       [7., 3., 1., 8., 6., 0., 6., 2., 7., 2.],
       [7., 6., 3., 5., 5., 0., 5., 8., 5., 5.],
       [7., 3., 3., 9., 3., 3., 8., 1., 9., 7.],
       [0., 3., 0., 7., 0., 4., 3., 7., 4., 9.],
       [4., 8., 8., 3., 7., 4., 5., 7., 4., 3.],
       [2., 6., 6., 8., 9., 9., 7., 9., 6., 5.],
       [4., 9., 9., 9., 1., 8., 6., 9., 8., 9.]])
m[:8,4:-1]
array([[2., 0., 5., 7., 9.],
       [6., 0., 6., 2., 7.],
       [5., 0., 5., 8., 5.],
       [3., 3., 8., 1., 9.],
       [0., 4., 3., 7., 4.],
       [7., 4., 5., 7., 4.],
       [9., 9., 7., 9., 6.],
       [1., 8., 6., 9., 8.]])
m[:8,4:9]
array([[2., 0., 5., 7., 9.],
       [6., 0., 6., 2., 7.],
       [5., 0., 5., 8., 5.],
       [3., 3., 8., 1., 9.],
       [0., 4., 3., 7., 4.],
       [7., 4., 5., 7., 4.],
       [9., 9., 7., 9., 6.],
       [1., 8., 6., 9., 8.]])
m333 = np.random.randint(0,10,(3,3,3))
m333
array([[[7, 8, 2],
        [3, 6, 1],
        [4, 4, 5]],

       [[4, 9, 4],
        [3, 0, 9],
        [2, 6, 3]],

       [[9, 9, 5],
        [9, 8, 2],
        [2, 2, 2]]])
m333[:,:,:]
array([[[7, 8, 2],
        [3, 6, 1],
        [4, 4, 5]],

       [[4, 9, 4],
        [3, 0, 9],
        [2, 6, 3]],

       [[9, 9, 5],
        [9, 8, 2],
        [2, 2, 2]]])
m333[:,:,0]
array([[7, 3, 4],
       [4, 3, 2],
       [9, 9, 2]])
m = np.random.randint(0,10,(15,15))
m
array([[4, 3, 7, 2, 8, 8, 3, 9, 8, 9, 5, 4, 0, 2, 5],
       [8, 4, 7, 8, 6, 6, 1, 3, 8, 8, 0, 5, 4, 4, 9],
       [7, 9, 1, 6, 9, 1, 4, 6, 5, 3, 9, 1, 2, 9, 3],
       [0, 4, 6, 7, 7, 6, 1, 0, 7, 6, 4, 1, 7, 2, 7],
       [9, 4, 0, 2, 1, 3, 2, 0, 7, 0, 2, 0, 8, 4, 4],
       [5, 1, 0, 2, 6, 5, 0, 0, 7, 1, 2, 3, 5, 6, 4],
       [9, 4, 6, 6, 0, 1, 4, 9, 3, 6, 6, 4, 6, 0, 4],
       [2, 6, 5, 5, 8, 0, 2, 5, 3, 3, 9, 6, 6, 3, 6],
       [8, 3, 2, 2, 3, 8, 1, 8, 6, 4, 7, 1, 7, 4, 5],
       [5, 5, 6, 5, 0, 5, 8, 1, 7, 7, 1, 3, 2, 0, 5],
       [0, 3, 5, 1, 4, 0, 7, 1, 9, 6, 6, 2, 2, 4, 4],
       [5, 6, 3, 8, 1, 8, 4, 9, 3, 5, 8, 7, 0, 3, 1],
       [1, 9, 7, 2, 6, 6, 1, 2, 7, 2, 8, 8, 7, 6, 9],
       [4, 1, 0, 1, 4, 8, 2, 7, 3, 6, 8, 9, 8, 3, 4],
       [2, 5, 9, 4, 0, 0, 7, 5, 1, 5, 2, 9, 7, 1, 5]])
m[1:10:3,::3]
array([[8, 8, 1, 8, 4],
       [9, 2, 2, 0, 8],
       [2, 5, 2, 3, 6]])

36 Fancy slicing

m
array([[4, 3, 7, 2, 8, 8, 3, 9, 8, 9, 5, 4, 0, 2, 5],
       [8, 4, 7, 8, 6, 6, 1, 3, 8, 8, 0, 5, 4, 4, 9],
       [7, 9, 1, 6, 9, 1, 4, 6, 5, 3, 9, 1, 2, 9, 3],
       [0, 4, 6, 7, 7, 6, 1, 0, 7, 6, 4, 1, 7, 2, 7],
       [9, 4, 0, 2, 1, 3, 2, 0, 7, 0, 2, 0, 8, 4, 4],
       [5, 1, 0, 2, 6, 5, 0, 0, 7, 1, 2, 3, 5, 6, 4],
       [9, 4, 6, 6, 0, 1, 4, 9, 3, 6, 6, 4, 6, 0, 4],
       [2, 6, 5, 5, 8, 0, 2, 5, 3, 3, 9, 6, 6, 3, 6],
       [8, 3, 2, 2, 3, 8, 1, 8, 6, 4, 7, 1, 7, 4, 5],
       [5, 5, 6, 5, 0, 5, 8, 1, 7, 7, 1, 3, 2, 0, 5],
       [0, 3, 5, 1, 4, 0, 7, 1, 9, 6, 6, 2, 2, 4, 4],
       [5, 6, 3, 8, 1, 8, 4, 9, 3, 5, 8, 7, 0, 3, 1],
       [1, 9, 7, 2, 6, 6, 1, 2, 7, 2, 8, 8, 7, 6, 9],
       [4, 1, 0, 1, 4, 8, 2, 7, 3, 6, 8, 9, 8, 3, 4],
       [2, 5, 9, 4, 0, 0, 7, 5, 1, 5, 2, 9, 7, 1, 5]])
m[[0,3]]
array([[4, 3, 7, 2, 8, 8, 3, 9, 8, 9, 5, 4, 0, 2, 5],
       [0, 4, 6, 7, 7, 6, 1, 0, 7, 6, 4, 1, 7, 2, 7]])
m[m<=2]
array([2, 0, 2, 1, 0, 1, 1, 1, 2, 0, 1, 0, 1, 2, 0, 2, 1, 2, 0, 0, 2, 0,
       1, 0, 2, 0, 0, 1, 2, 0, 1, 0, 2, 0, 2, 2, 2, 1, 1, 0, 1, 1, 2, 0,
       0, 1, 0, 1, 2, 2, 1, 0, 1, 1, 2, 1, 2, 2, 1, 0, 1, 2, 2, 0, 0, 1,
       2, 1])
m[:,[0,2]]
array([[4, 7],
       [8, 7],
       [7, 1],
       [0, 6],
       [9, 0],
       [5, 0],
       [9, 6],
       [2, 5],
       [8, 2],
       [5, 6],
       [0, 5],
       [5, 3],
       [1, 7],
       [4, 0],
       [2, 9]])