Corte básico e indexación avanzada en NumPy Python

Requisitos previos: Numpy en Python Introducción
NumPy o Numeric Python es un paquete para el cálculo en arrays homogéneas n-dimensionales. En numpy dimensiones se denominan ejes.

¿Por qué necesitamos NumPy?

Surge una pregunta de por qué necesitamos NumPy cuando las listas de python ya están allí. La respuesta es que no podemos realizar operaciones en todos los elementos de dos listas directamente. Por ejemplo, no podemos multiplicar dos listas directamente, tendremos que hacerlo por elementos. Aquí es donde entra en juego el papel de NumPy.

Python

# Python program to demonstrate a need of NumPy
 
list1 = [1, 2, 3, 4 ,5, 6]
list2 = [10, 9, 8, 7, 6, 5]
 
# Multiplying both lists directly would give an error.
print(list1*list2)

Producción : 

TypeError: can't multiply sequence by non-int of type 'list'

Donde esto se puede hacer fácilmente con arrays NumPy.

Otro ejemplo,

Python

# Python program to demonstrate the use of NumPy arrays
import numpy as np
 
list1 = [1, 2, 3, 4, 5, 6]
list2 = [10, 9, 8, 7, 6, 5]
 
# Convert list1 into a NumPy array
a1 = np.array(list1)
 
# Convert list2 into a NumPy array
a2 = np.array(list2)
 
print(a1*a2)

Producción : 

array([10, 18, 24, 28, 30, 30])

Este artículo lo ayudará a familiarizarse con la indexación en NumPy en detalle. El paquete Numpy de python tiene un gran poder de indexación de diferentes maneras.
 

Indexación mediante arrays de índice

La indexación se puede realizar de forma numérica mediante el uso de una array como índice. En caso de corte, se devuelve una vista o una copia superficial de la array, pero en la array de índice se devuelve una copia de la array original. Las arrays Numpy se pueden indexar con otras arrays o cualquier otra secuencia con la excepción de las tuplas. El último elemento está indexado por -1, el último por -2 y así sucesivamente.

Python

# Python program to demonstrate
# the use of index arrays.
import numpy as np
 
# Create a sequence of integers from 10 to 1 with a step of -2
a = np.arrange(10, 1, -2)
print("\n A sequential array with a negative step: \n",a)
 
# Indexes are specified inside the np.array method.
newarr = a[np.array([3, 1, 2 ])]
print("\n Elements at these indices are:\n",newarr)

Producción : 

A sequential array with a negative step:
[10  8  6  4  2]

Elements at these indices are:
[4 8 6]

Otro ejemplo,

Python

import numpy as np
 
# NumPy array with elements from 1 to 9
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
 
# Index values can be negative.
arr = x[np.array([1, 3, -3])]
print("\n Elements are : \n",arr)

Producción : 

Elements are:
[2 4 7]

Tipos de indexación

Hay dos tipos de indexación:

1. División e indexación básicas: Considere la sintaxis x[obj] donde x es la array y obj es el índice. El objeto Slice es el índice en el caso de un corte básico. El corte básico ocurre cuando obj es:

  1. un objeto de segmento que tiene la forma inicio: parada: paso
  2. un entero
  3. o una tupla de objetos de corte y enteros

Todas las arrays generadas por el corte básico siempre son una vista de la array original.

Python

# Python program for basic slicing.
import numpy as np
 
# Arrange elements from 0 to 19
a = np.arrange(20)
print("\n Array is:\n ",a)
 
# a[start:stop:step]
print("\n a[-8:17:1] = ",a[-8:17:1])
 
# The : operator means all elements till the end.
print("\n a[10:] = ",a[10:])

Producción :

Array is:
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]

a[-8:17:1]  =  [12 13 14 15 16]

a[10:] = [10 11 12 13 14 15 16 17 18 19] 

Los puntos suspensivos también se pueden usar junto con el corte básico. Puntos suspensivos (…) es el número de: objetos necesarios para hacer una tupla de selección de la misma longitud que las dimensiones de la array.

Python

# Python program for indexing using basic slicing with ellipsis
import numpy as np
 
# A 3 dimensional array.
b = np.array([[[1, 2, 3],[4, 5, 6]],
            [[7, 8, 9],[10, 11, 12]]])
 
print(b[...,1]) #Equivalent to b[: ,: ,1 ]

Producción :

[[ 2  5]
 [ 8 11]]

2. Indexación avanzada: la indexación avanzada se activa cuando obj es: 

  • un ndarray de tipo entero o booleano
  • o una tupla con al menos un objeto de secuencia
  • es un objeto de secuencia no tupla

La indexación avanzada devuelve una copia de los datos en lugar de una vista de los mismos. La indexación avanzada es de dos tipos, entero y booleano.

Indexación puramente de enteros: cuando se utilizan números enteros para la indexación. Cada elemento de la primera dimensión se empareja con el elemento de la segunda dimensión. Entonces, el índice de los elementos en este caso es (0,0), (1,0), (2,1) y se seleccionan los elementos correspondientes.

Python

# Python program showing advanced indexing
import numpy as np
 
a = np.array([[1 ,2 ],[3 ,4 ],[5 ,6 ]])
print(a[[0 ,1 ,2 ],[0 ,0 ,1]])

Producción : 

[1 3 6]

Indexación booleana 
Esta indexación tiene alguna expresión booleana como índice. Se devuelven aquellos elementos que satisfacen esa expresión booleana. Se utiliza para filtrar los valores de los elementos deseados.

Python

# You may wish to select numbers greater than 50
import numpy as np
 
a = np.array([10, 40, 80, 50, 100])
print(a[a>50])

Producción : 

[80 100]

Python

# You may wish to square the multiples of 40
import numpy as np
 
a = np.array([10, 40, 80, 50, 100])
print(a[a%40==0]**2)

Producción : 

[1600 6400])

Python

# You may wish to select those elements whose
# sum of row is a multiple of 10.
import numpy as np
 
b = np.array([[5, 5],[4, 5],[16, 4]])
sumrow = b.sum(-1)
print(b[sumrow%10==0])

Producción : 

array([[ 5, 5], [16, 4]])

Referencia: 
SciPy.org
Este artículo es una contribución de Ayushi Asthana . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *