Operaciones de arrays de Numpy
Numpy contiene algunas funciones para manejar arrays, que se pueden clasificar aproximadamente en las siguientes categorías:
- Modificar la forma de los arrays
- Voltear arrays
- Modificar dimensiones de los arrays
- Concatenar arrays
- Dividir arrays
- Añadir y eliminar elementos de arrays
Modificar la forma de los arrays
| Función | Descripción |
|---|---|
reshape |
Modifica la forma sin cambiar los datos |
flat |
Iterador de elementos de array |
flatten |
Devuelve una copia del array; los cambios realizados en la copia no afectan al array original |
ravel |
Devuelve el array aplanado |
numpy.reshape
La función numpy.reshape puede modificar la forma sin cambiar los datos, con el siguiente formato:
numpy.reshape(arr, newshape, order='C')
arr: El array cuya forma se va a modificarnewshape: Entero o array de enteros; la nueva forma debe ser compatible con la forma original- order: 'C' -- por filas, 'F' -- por columnas, 'A' -- orden original, 'k' -- orden de aparición de los elementos en memoria.
Ejemplo
El resultado de salida es el siguiente:
原始数组: [0 1 2 3 4 5 6 7] 修改后的数组: [[0 1] [2 3] [4 5] [6 7]]
numpy.ndarray.flat
numpy.ndarray.flat es un iterador de elementos de array, como en el siguiente ejemplo:
Ejemplo
El resultado de salida es el siguiente:
原始数组: [0 1 2] [3 4 5] [6 7 8] 迭代后的数组: 0 1 2 3 4 5 6 7 8
numpy.ndarray.flatten
numpy.ndarray.flatten devuelve una copia del array; los cambios realizados en la copia no afectan al array original. Su formato es el siguiente:
ndarray.flatten(order='C')
Descripción de parámetros:
- order: 'C' -- por filas, 'F' -- por columnas, 'A' -- orden original, 'K' -- orden de aparición de los elementos en memoria.
Ejemplo
El resultado de salida es el siguiente:
原数组: [[0 1 2 3] [4 5 6 7]] 展开的数组: [0 1 2 3 4 5 6 7] 以 F 风格顺序展开的数组: [0 4 1 5 2 6 3 7]
numpy.ravel
numpy.ravel() aplana los elementos del array, normalmente en orden 'estilo C'. Devuelve una vista del array (view, algo similar al concepto de referencia en C/C++), y las modificaciones afectan al array original.
Esta función recibe dos parámetros:
numpy.ravel(a, order='C')
Descripción de parámetros:
- order: 'C' -- por filas, 'F' -- por columnas, 'A' -- orden original, 'K' -- orden de aparición de los elementos en memoria.
Ejemplo
El resultado de salida es el siguiente:
原数组: [[0 1 2 3] [4 5 6 7]] 调用 ravel 函数之后: [0 1 2 3 4 5 6 7] 以 F 风格顺序调用 ravel 函数之后: [0 4 1 5 2 6 3 7]
Voltear arrays
| Función | Descripción |
|---|---|
transpose |
Intercambia las dimensiones del array |
ndarray.T |
yself.transpose()Igual |
rollaxis |
Rueda el eje especificado hacia atrás |
swapaxes |
Intercambia dos ejes del array |
numpy.transpose
La función numpy.transpose se utiliza para intercambiar las dimensiones de un array, con el siguiente formato:
numpy.transpose(arr, axes)
Descripción de parámetros:
arr: El array a operaraxes: Lista de enteros que corresponden a las dimensiones; normalmente todas las dimensiones se intercambian.
Ejemplo
El resultado de salida es el siguiente:
原数组: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] 对换数组: [[ 0 4 8] [ 1 5 9] [ 2 6 10] [ 3 7 11]]
numpy.ndarray.T es similar a numpy.transpose:
Ejemplo
El resultado de salida es el siguiente:
原数组: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] 转置数组: [[ 0 4 8] [ 1 5 9] [ 2 6 10] [ 3 7 11]]
numpy.rollaxis
La función numpy.rollaxis rueda un eje específico hacia atrás hasta una posición determinada, con el siguiente formato:
numpy.rollaxis(arr, axis, start)
Descripción de parámetros:
arr: Arrayaxis: El eje que se va a rodar hacia atrás; las posiciones relativas de los otros ejes no cambian.start: El valor predeterminado es cero, lo que indica un desplazamiento completo. Rodará a la posición específica.
Ejemplo
El resultado de salida es el siguiente:
原数组: [[[0 1] [2 3]] [[4 5] [6 7]]] 获取数组中一个值: (array([1]), array([1]), array([0])) 6 调用 rollaxis 函数: [[[0 2] [4 6]] [[1 3] [5 7]]] (array([0]), array([1]), array([1])) 调用 rollaxis 函数: [[[0 2] [1 3]] [[4 6] [5 7]]] (array([1]), array([0]), array([1]))
numpy.swapaxes
La función numpy.swapaxes se utiliza para intercambiar dos ejes de un array, con el siguiente formato:
numpy.swapaxes(arr, axis1, axis2)
arr: El array de entradaaxis1: El entero correspondiente al primer ejeaxis2: El entero correspondiente al segundo eje
Ejemplo
El resultado de salida es el siguiente:
原数组: [[[0 1] [2 3]] [[4 5] [6 7]]] 调用 swapaxes 函数后的数组: [[[0 4] [2 6]] [[1 5] [3 7]]]
Modificar dimensiones de los arrays
| Dimensión | Descripción |
|---|---|
broadcast |
Produce un objeto que imita la transmisión (broadcast) |
broadcast_to |
Transmite el array a una nueva forma |
expand_dims |
Expande la forma del array |
squeeze |
Elimina entradas unidimensionales de la forma del array |
numpy.broadcast
numpy.broadcast se utiliza para imitar la transmisión (broadcast). Devuelve un objeto que encapsula el resultado de transmitir un array a otro array.
Esta función utiliza dos arrays como parámetros de entrada, como en el siguiente ejemplo:
Ejemplo
El resultado es:
对 y 广播 x: 1 4 1 5 广播对象的形状: (3, 3) 手动使用 broadcast 将 x 与 y 相加: (3, 3) 调用 flat 函数: [[5. 6. 7.] [6. 7. 8.] [7. 8. 9.]] x 与 y 的和: [[5 6 7] [6 7 8] [7 8 9]]
numpy.broadcast_to
La función numpy.broadcast_to transmite el array a una nueva forma. Devuelve una vista de solo lectura sobre el array original. Normalmente no es contigua. Si la nueva forma no cumple las reglas de transmisión de NumPy, la función puede lanzar un ValueError.
numpy.broadcast_to(array, shape, subok)
Ejemplo
El resultado es:
原数组: [[0 1 2 3]] 调用 broadcast_to 函数之后: [[0 1 2 3] [0 1 2 3] [0 1 2 3] [0 1 2 3]]
numpy.expand_dims
La función numpy.expand_dims expande la forma del array insertando un nuevo eje en la posición especificada. El formato de la función es el siguiente:
numpy.expand_dims(arr, axis)
Descripción de parámetros:
arr: El array de entradaaxis: La posición donde se inserta el nuevo eje
Ejemplo
El resultado de salida es:
数组 x: [[1 2] [3 4]] 数组 y: [[[1 2] [3 4]]] 数组 x 和 y 的形状: (2, 2) (1, 2, 2) 在位置 1 插入轴之后的数组 y: [[[1 2]] [[3 4]]] x.ndim 和 y.ndim: 2 3 x.shape 和 y.shape: (2, 2) (2, 1, 2)
numpy.squeeze
La función numpy.squeeze elimina las entradas de una dimensión de la forma del array dado. La sintaxis de la función es la siguiente:
numpy.squeeze(arr, axis)
Descripción de parámetros:
arr: array de entradaaxis: entero o tupla de enteros, utilizado para seleccionar un subconjunto de entradas de una dimensión en la forma
Ejemplo
El resultado de salida es:
数组 x: [[[0 1 2] [3 4 5] [6 7 8]]] 数组 y: [[0 1 2] [3 4 5] [6 7 8]] 数组 x 和 y 的形状: (1, 3, 3) (3, 3)
Concatenar arrays
| Función | Descripción |
|---|---|
concatenate |
Concatenar una secuencia de arrays a lo largo de un eje existente |
stack |
Une una serie de arrays a lo largo de un nuevo eje. |
hstack |
Apila horizontalmente los arrays de la secuencia (dirección de las columnas) |
vstack |
Apila verticalmente los arrays de la secuencia (dirección de las filas) |
numpy.concatenate
La función numpy.concatenate se utiliza para concatenar dos o más arrays de la misma forma a lo largo de un eje especificado. Su sintaxis es la siguiente:
numpy.concatenate((a1, a2, ...), axis)
Descripción de parámetros:
a1, a2, ...: arrays del mismo tipoaxis: eje a lo largo del cual se concatenan los arrays, por defecto es 0
Ejemplo
El resultado de salida es:
第一个数组: [[1 2] [3 4]] 第二个数组: [[5 6] [7 8]] 沿轴 0 连接两个数组: [[1 2] [3 4] [5 6] [7 8]] 沿轴 1 连接两个数组: [[1 2 5 6] [3 4 7 8]]
numpy.stack
La función numpy.stack se utiliza para concatenar una secuencia de arrays a lo largo de un nuevo eje. Su sintaxis es la siguiente:
numpy.stack(arrays, axis)
Descripción de parámetros:
arraysSecuencia de arrays de la misma formaaxis: eje en el array resultante, a lo largo del cual se apilan los arrays de entrada
Ejemplo
El resultado de salida es el siguiente:
第一个数组: [[1 2] [3 4]] 第二个数组: [[5 6] [7 8]] 沿轴 0 堆叠两个数组: [[[1 2] [3 4]] [[5 6] [7 8]]] 沿轴 1 堆叠两个数组: [[[1 2] [5 6]] [[3 4] [7 8]]]
numpy.hstack
numpy.hstack es un envoltorio conveniente de numpy.concatenate, utilizado para apilar arrays horizontalmente a lo largo del segundo eje (axis=1).
numpy.hstack trata los arrays unidimensionales como vectores columna para concatenarlos, lo que equivale a numpy.concatenate([numpy.atleast_1d(arr) for arr in arrays], axis=1) (cuando todos los arrays tienen dimensión ≥2, se concatenan directamente a lo largo de axis=1).
Ejemplo
El resultado de salida es el siguiente:
第一个数组: [[1 2] [3 4]] 第二个数组: [[5 6] [7 8]] 水平堆叠: [[1 2 5 6] [3 4 7 8]]
numpy.vstack
numpy.vstack es un envoltorio conveniente de numpy.concatenate, utilizado para apilar arrays verticalmente a lo largo del primer eje (axis=0).
numpy.vstack promueve automáticamente los arrays unidimensionales a vectores fila bidimensionales y luego los concatena en la dirección vertical, lo que equivale a numpy.concatenate([numpy.atleast_2d(arr) for arr in arrays], axis=0).
Ejemplo
El resultado de salida es:
第一个数组: [[1 2] [3 4]] 第二个数组: [[5 6] [7 8]] 竖直堆叠: [[1 2] [3 4] [5 6] [7 8]]
Dividir arrays
| Función | Arrays y operaciones |
|---|---|
split |
Divide un array en varios subarrays |
hsplit |
Divide horizontalmente un array en varios subarrays (por columnas) |
vsplit |
Divide verticalmente un array en varios subarrays (por filas) |
numpy.split
La función numpy.split divide un array en subarrays a lo largo de un eje específico. Su sintaxis es la siguiente:
numpy.split(ary, indices_or_sections, axis)
Descripción de parámetros:
ary: el array a dividirindices_or_sections: si es un entero, se divide en partes iguales usando ese número; si es un array, son las posiciones a lo largo del eje donde se divide (abierto por la izquierda, cerrado por la derecha)axis: establece a lo largo de qué dirección se divide. Por defecto es 0, división transversal, es decir, dirección horizontal. Cuando es 1, división longitudinal, es decir, dirección vertical.
Ejemplo
El resultado de salida es:
第一个数组: [0 1 2 3 4 5 6 7 8] 将数组分为三个大小相等的子数组: [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])] 将数组在一维数组中表明的位置分割: [array([0, 1, 2, 3]), array([4, 5, 6]), array([7, 8])]
Cuando axis es 0 se divide en dirección horizontal; cuando axis es 1 se divide en dirección vertical:
Ejemplo
a = np.arange(16).reshape(4, 4)
print('Primer array:')
print(a)
print('\n')
print('División por defecto (eje 0):')
b = np.split(a,2)
print(b)
print('\n')
print('División a lo largo de la dirección horizontal:')
c = np.split(a,2,1)
print(c)
print('\n')
print('División a lo largo de la dirección horizontal:')
d= np.hsplit(a,2)
print(d)
El resultado de salida es:
第一个数组:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
默认分割(0轴):
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
沿水平方向分割:
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
沿水平方向分割:
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
numpy.hsplit
La función numpy.hsplit se utiliza para dividir horizontalmente un array, dividiendo el array original especificando el número de arrays de la misma forma que se devolverán.
Ejemplo
El resultado de salida es:
原array:
[[4. 7. 6. 3. 2. 6.]
[6. 3. 6. 7. 9. 7.]]
拆分后:
[array([[4., 7.],
[6., 3.]]), array([[6., 3.],
[6., 7.]]), array([[2., 6.],
[9., 7.]])]
numpy.vsplit
numpy.vsplit divide a lo largo del eje vertical, y su forma de división es la misma que el uso de hsplit.
Ejemplo
El resultado de salida es:
第一个数组:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
竖直分割:
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
Añadir y eliminar elementos de arrays
| Función | Elemento y descripción |
|---|---|
resize |
Devuelve un nuevo array con la forma especificada |
append |
Añade valores al final del array |
insert |
Inserta valores antes del índice especificado a lo largo del eje dado |
delete |
Elimina un subarray de un eje y devuelve el nuevo array después de la eliminación |
unique |
Busca los elementos únicos dentro del array |
numpy.resize
La función numpy.resize devuelve un nuevo array del tamaño especificado.
Si el tamaño del nuevo array es mayor que el tamaño original, contiene copias de los elementos del array original.
numpy.resize(arr, shape)
Descripción de parámetros:
arr: el array cuyo tamaño se va a modificarshape: la nueva forma del array devuelto
Ejemplo
El resultado de salida es:
第一个数组: [[1 2 3] [4 5 6]] 第一个数组的形状: (2, 3) 第二个数组: [[1 2] [3 4] [5 6]] 第二个数组的形状: (3, 2) 修改第二个数组的大小: [[1 2 3] [4 5 6] [1 2 3]]
numpy.append
La función numpy.append añade valores al final del array. La operación de añadir asigna un array completo y copia el array original en el nuevo array. Además, las dimensiones de los arrays de entrada deben coincidir; de lo contrario, se generará un ValueError.
La función append siempre devuelve un array unidimensional.
numpy.append(arr, values, axis=None)
Descripción de parámetros:
arr: array de entradavalues: el valor que se va a añadir aarrel valor a añadir, debe tener la misma forma quearrla misma forma (excepto en el eje donde se añade)axis: por defecto es None. Cuando axis no está definido, se añade horizontalmente y el resultado siempre es un array unidimensional. Cuando axis está definido, puede ser 0 y 1 respectivamente. Cuando axis está definido, puede ser 0 y 1 respectivamente (el número de columnas debe ser el mismo). Cuando axis es 1, el array se añade a la derecha (el número de filas debe ser el mismo).
Ejemplo
El resultado de salida es:
第一个数组: [[1 2 3] [4 5 6]] 向数组添加元素: [1 2 3 4 5 6 7 8 9] 沿轴 0 添加元素: [[1 2 3] [4 5 6] [7 8 9]] 沿轴 1 添加元素: [[1 2 3 5 5 5] [4 5 6 7 8 9]]
numpy.insert
La función numpy.insert inserta valores en el array de entrada antes del índice dado y a lo largo del eje dado.
La función inserta los valores o arrays dados en la posición especificada (o array de posiciones) y luego devuelve un nuevo array. Los elementos insertados pueden ser valores escalares o arrays. Cabe señalar que la operación de inserción devuelve un nuevo array y no modifica el array original.
numpy.insert(arr, obj, values, axis)
Descripción de parámetros:
arr: array de entradaobj: índice antes del cual se insertan los valoresvalues: los valores a insertaraxis: eje a lo largo del cual se inserta. Si no se proporciona, el array de entrada se aplana.
Ejemplo
El resultado de salida es el siguiente:
第一个数组: [[1 2] [3 4] [5 6]] 未传递 Axis 参数。 在删除之前输入数组会被展开。 [ 1 2 3 11 12 4 5 6] 传递了 Axis 参数。 会广播值数组来配输入数组。 沿轴 0 广播: [[ 1 2] [11 11] [ 3 4] [ 5 6]] 沿轴 1 广播: [[ 1 11 2] [ 3 11 4] [ 5 11 6]]
numpy.delete
La función numpy.delete devuelve un nuevo array resultante de eliminar el subarray especificado del array de entrada. Al igual que en el caso de la función insert(), si no se proporciona el parámetro de eje, el array de entrada se aplana.
Numpy.delete(arr, obj, axis)
Descripción de parámetros:
arr: array de entradaobj: puede ser un slice, un entero o un array de enteros, que indica el subarray que se debe eliminar del array de entradaaxis: eje a lo largo del cual se elimina el subarray dado. Si no se proporciona, el array de entrada se aplana.
Ejemplo
El resultado de salida es:
第一个数组: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] 未传递 Axis 参数。 在插入之前输入数组会被展开。 [ 0 1 2 3 4 6 7 8 9 10 11] 删除第二列: [[ 0 2 3] [ 4 6 7] [ 8 10 11]] 包含从数组中删除的替代值的切片: [ 2 4 6 8 10]
numpy.unique
La función numpy.unique se utiliza para eliminar los elementos duplicados de un array.
numpy.unique(arr, return_index, return_inverse, return_counts)
arr: array de entrada; si no es un array unidimensional, se aplanareturn_index: si estrue, devuelve las posiciones (índices) de los elementos de la nueva lista en la lista antigua, y se almacenan en forma de listareturn_inverse: si estrue,devuelve la posición (índice) de los elementos de la lista anterior en la nueva lista, y los almacena en forma de listareturn_counts: si estrue,devuelve el número de apariciones de los elementos del array deduplicado en el array original
Ejemplo
El resultado de salida es:
第一个数组: [5 2 6 2 7 5 6 8 2 9] 第一个数组的去重值: [2 5 6 7 8 9] 去重数组的索引数组: [1 0 2 4 7 9] 我们可以看到每个和原数组下标对应的数值: [5 2 6 2 7 5 6 8 2 9] 去重数组的下标: [2 5 6 7 8 9] 下标为: [1 0 2 0 3 1 2 4 0 5] 使用下标重构原数组: [5 2 6 2 7 5 6 8 2 9] 返回去重元素的重复数量: [2 5 6 7 8 9] [3 2 2 1 1 1]Otras extensiones