Indexación avanzada de NumPy
NumPy ofrece más formas de indexación que las secuencias típicas de Python.
Además de la indexación con enteros y cortes vista anteriormente, las matrices pueden indexarse mediante matrices de enteros, indexación booleana e indexación fancy.
La indexación avanzada en NumPy se refiere al uso de matrices de enteros, matrices booleanas u otras secuencias para acceder a los elementos de una matriz. En comparación con la indexación básica, la indexación avanzada puede acceder a cualquier elemento de la matriz y también se puede utilizar para realizar operaciones y modificaciones complejas en la matriz.
Indexación con matrices de enteros
La indexación con matrices de enteros consiste en utilizar una matriz para acceder a los elementos de otra matriz. Cada elemento de esta matriz es un valor de índice en alguna dimensión de la matriz objetivo.
El siguiente ejemplo obtiene en la matriz los(0,0),(1,1)y(2,0)elementos en las posiciones.
Ejemplo
El resultado de salida es:
[1 4 5]
El siguiente ejemplo obtiene los elementos de las cuatro esquinas de una matriz de 4X3. Los índices de fila son [0,0] y [3,3], y los índices de columna son [0,2] y [0,2].
Ejemplo
El resultado de salida es:
我们的数组是: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 这个数组的四个角元素是: [[ 0 2] [ 9 11]]
El resultado devuelto es un objeto ndarray que contiene los elementos de cada esquina.
Se puede, mediante el corte,:o…combinar con matrices de índice. Como en el siguiente ejemplo:
Ejemplo
El resultado de salida es:
[[5 6] [8 9]] [[5 6] [8 9]] [[2 3] [5 6] [8 9]]
Indexación booleana
Podemos indexar la matriz objetivo mediante una matriz booleana.
La indexación booleana utiliza operaciones booleanas (como operadores de comparación) para obtener los elementos de una matriz que cumplen una condición especificada.
El siguiente ejemplo obtiene los elementos mayores que 5:
Ejemplo
El resultado de salida es:
我们的数组是: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 大于 5 的元素是: [ 6 7 8 9 10 11]
El siguiente ejemplo utiliza~(operador de complemento) para filtrar NaN.
Ejemplo
El resultado de salida es:
[ 1. 2. 3. 4. 5.]
El siguiente ejemplo demuestra cómo filtrar los elementos que no son complejos de una matriz.
Ejemplo
La salida es la siguiente:
[2.0+6.j 3.5+5.j]
Indexación fancy
La indexación fancy se refiere a la indexación utilizando matrices de enteros.
La indexación fancy toma valores utilizando los valores del arreglo de índices como subíndices de un determinado eje de la matriz objetivo.
Cuando se utiliza una matriz unidimensional de enteros como índice, si el objetivo es una matriz unidimensional, el resultado de la indexación son los elementos en las posiciones correspondientes; si el objetivo es una matriz bidimensional, entonces son las filas correspondientes a los subíndices.
La indexación fancy, a diferencia del corte, siempre copia los datos a una nueva matriz.
Matriz unidimensional
Una matriz unidimensional tiene solo un ejeaxis = 0, por lo que la matriz unidimensional se indexaaxis = 0sobre este eje:
Ejemplo
x = np.arange(9)
print(x)
# La matriz unidimensional lee el elemento correspondiente al subíndice especificado
print(-------Leer el elemento correspondiente al índice-------)
x2 = x[[0, 6]] # Usando indexación fancy
print(x2)
print(x2[0])
print(x2[1])
El resultado de salida es:
[0 1 2 3 4 5 6 7 8] -------读取下标对应的元素------- [0 6] 0 6
Matriz bidimensional
1. Pasar un arreglo de índices en orden
Ejemplo
print (x[[4,2,1,7]])La salida para los subíndices4, 2, 1, 7correspondientes a las filas es la siguiente:
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15] [16 17 18 19] [20 21 22 23] [24 25 26 27] [28 29 30 31]] -------读取下标对应的行------- [[16 17 18 19] [ 8 9 10 11] [ 4 5 6 7] [28 29 30 31]]
2. Pasar un arreglo de índices en orden inverso
Ejemplo
El resultado de salida es:
[[16 17 18 19] [24 25 26 27] [28 29 30 31] [ 4 5 6 7]]
3. Pasar múltiples arreglos de índices (se debe usar np.ix_)
La función np.ix_ consiste en tomar dos arreglos y generar la relación de mapeo del producto cartesiano.
El producto cartesiano se refiere, en matemáticas, al producto cartesiano de dos conjuntos X e Y (Cartesian product), también llamado producto directo, y se representa comoX×Y, el primer objeto es un miembro de X, y el segundo objeto es un miembro de todos los posibles pares ordenados de Y.
Por ejemploA={a,b}, B={0,1,2}, entonces:
A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}
Ejemplo
El resultado de salida es:
[[ 4 7 5 6] [20 23 21 22] [28 31 29 30] [ 8 11 9 10]]Otras extensiones