Capítulo 2, explicación detallada de las funciones comunes de python-numpy

Nota: El tamaño en el significado de la siguiente función se refiere al valor de la forma del atributo de la matriz

Introducción a Numpy

NumPy es un paquete de Python. Significa "Python Numérico". Es una biblioteca que consta de objetos de matriz multidimensional y una colección de rutinas para manipular matrices.

Numeric, el predecesor de NumPy, fue desarrollado por Jim Hugunin. También se ha desarrollado otro paquete, Numarray, que tiene algunas funciones adicionales. En 2005, Travis Oliphant creó el paquete NumPy al integrar la funcionalidad de Numarray en el paquete Numeric. Este proyecto de código abierto tiene muchos colaboradores.

Los estudiantes que aprenden Python deben conocer la biblioteca Numpy, y también saber que esta biblioteca es una biblioteca indispensable en el campo del aprendizaje automático. Aquí he recopilado algunas funciones de uso común de la biblioteca Numpy para usted, para que pueda encontrarla cuando necesite. úsalo

Explicación de la función de biblioteca Numpy

Tipos de datos numéricos

tipo significado
np.int8 y np.uint8 entero (-128 a 127) y entero sin signo (0 a 255)
np.int16 y np.uint16 Entero (-32768 a 32767) y entero sin signo (0 a 65535)
np.int32 y np.uint32 enteros (-2147483648 a 2147483647) y enteros sin signo (0 a 4294967295)
np.int64 y np.uint64 enteros (-9223372036854775808 a 9223372036854775807) y enteros sin signo (0 a 18446744073709551615)
np.float16 Número de punto flotante de precisión media (precisión de los últimos cuatro dígitos después del punto decimal)
np.float32 Número de punto flotante de precisión simple (precisión de los últimos 8 dígitos después del punto decimal)
np.float64 punto flotante de precisión doble
np.complejo64 Números complejos, representados por dos números de coma flotante de 32 bits (que consisten en números reales e imaginarios)
np.complejo128 Números complejos, representados por dos números de punto flotante de 64 bits (que consisten en números reales e imaginarios)
np.bool_ Valor booleano que consta de verdadero y falso

Creación de Numpy

función significado
np.array(objeto, dtype=Ninguno,copia=Verdadero) objeto = [] o (), crea un grupo unidimensional. object = [[],[],…] o ((),()…), crea una matriz bidimensional. dtype puede elegir el tipo de datos, si no está escrito, el sistema juzgará automáticamente y completará el tipo de datos. copiar los valores predeterminados a Verdadero
np.asarray(objeto,dtype=Ninguno) Cuando np.array(copy=False) dos funciones iguales

Explique el uso de la copia de parámetros en np.array, la descripción del texto es muy problemática, demostremos el código

import numpy as np
a = [-1,2,2]
a = np.array(a)
c = np.array(a,copy = False)
a[0] = 100
print('当copy=False')
print('c数组')
print(c)
print('a数组')
print(a)
#代码运行结果:
当copy=False
c数组
[100   2   2]
a数组
[100   2   2]
当copy=True
c数组
[-1  2  2]
a数组
[100   2   2]

A través de los resultados del código, podemos ver la diferencia entre copiar es Verdadero y Falso, y también entender la diferencia entre np.array y np.asarray

función significado
Cree una secuencia aritmética np.arange([start,]stop, [step],[dtype]) Cree una matriz desde el inicio hasta la parada-1 con un tamaño de paso de paso, donde el inicio predeterminado es 0, el paso predeterminado es 1 y la parada es un parámetro que debe completarse
Cree una secuencia aritmética np.linspace (inicio, parada, [num], [punto final], [dtype]) Cree una serie aritmética de principio a fin, num es el número de series aritméticas, el valor predeterminado es 50, el valor predeterminado de punto final es Verdadero, lo que indica que el último elemento de la serie contiene parada, de lo contrario, no
array de valores especiales np.zeros(shape, [dtype],) forma es un valor, cree una matriz unidimensional con un valor de 0 y forma sea una tupla o lista, cree una matriz con un valor de 0 igual al tamaño de la forma.
array de valores especiales np.ones(shape,[dtype]) la forma es un valor, crea una matriz unidimensional con un valor de 1 y la forma es una tupla o lista, crea una matriz con un valor de 1 con el tamaño de la forma
matriz de valor especial np.eye(n,[m],[k],[dtype]) n es el número de filas en la matriz. m es el número de columnas de salida, el valor predeterminado es n. El k predeterminado es 0, lo que significa que la diagonal principal es 1 y el resto son 0. Cuanto menor es el número negativo, la diagonal de 1 va debajo de la diagonal principal, y cuanto mayor es el número positivo, la diagonal de 1 va a la diagonal principal Ir por encima de la diagonal.

numpy crear matriz aleatoria

función significado
np.random.seed(k) Si se usa el mismo valor de k, los números aleatorios generados cada vez son los mismos. Si este valor no está configurado, el sistema elegirá este valor de acuerdo con el tiempo. En este momento, los números aleatorios generados cada vez son diferentes debido a las diferencias horarias.
np.random.random([tamaño]) Genere aleatoriamente una matriz en el intervalo [0,1), szie solo genera una matriz de datos cuando no está completa, el tamaño puede recibir una lista o una tupla, y genera aleatoriamente una matriz del mismo tamaño que el tamaño
np.aleatorio.al azar(x,x1,x2…) Genere aleatoriamente una matriz que se ajuste al tamaño y la forma de (x, x1, x2...) en el intervalo [0,1)
np.aleatorio.randn(x,x1,x2…) Genere una matriz de (x,x1,x2...) tamaño y forma conforme a la distribución normal estándar
np.random.randint(bajo, [alto], [tamaño], [tipod]) Genere una matriz con el mismo tamaño en el intervalo [bajo, alto] y genere una matriz con el intervalo [0, bajo) cuando el parámetro alto no esté lleno. Cuando la forma no se completa, solo se genera una matriz de datos
np.random.choice(a,[tamaño],[reemplazar=Verdadero],[p]) Si a es un número, se extrae aleatoriamente un número de [0, a), y a es un número aleatoriamente extraído de una lista, una tupla y una matriz (debe ser unidimensional). Cuando no se completa el tamaño, solo se generará aleatoriamente un dato, el tamaño es un número y los datos de tamaño se generan aleatoriamente para formar una matriz unidimensional.Si el tamaño es una lista o una tupla, una matriz de los se generará el mismo tamaño que el tamaño. El valor predeterminado de replace es True, lo que significa que se puede tomar el mismo número, y False significa que no se puede tomar el mismo número. p corresponde a a, lo que significa la probabilidad de seleccionar cada elemento en la matriz a, y el valor predeterminado es que la probabilidad de seleccionar cada elemento es la misma.
numpy.random.normal(loc=0.0, escala=1.0, tamaño=Ninguno) loc: datos de coma flotante, la media (centro) de la distribución. escala: datos de punto flotante, la desviación estándar (ancho) de la distribución. size: un entero o una tupla de enteros, si se da size se genera un array del mismo tamaño que size. Si el tamaño es Ninguno (el valor predeterminado), se devuelve un valor.

Funciones de propiedad de matrices Numpy

función significado
soy yo volver int. Indica las dimensiones de la matriz.
forma tupla de retorno. Representa el tamaño de la matriz. Para una matriz con n filas y m columnas, la forma es (n,m)
tamaño volver int. Representa el número total de elementos en la matriz, que es igual al producto de la forma de la matriz
tipo de d tipo de retorno. Describe el tipo de elementos en la matriz.
tamaño del artículo volver int. Representa el tamaño en bytes de cada elemento de la matriz
nbytes volver int. Indica el espacio ocupado por la matriz

Numpy cambia la forma de la matriz

función significado
np.reshape(a, nueva forma,) 或a.reshape(forma) Las dos funciones tienen el mismo efecto. El parámetro newshape de np.reshape solo puede recibir listas y tuplas, pero a.reshape no solo puede recibir listas y tuplas, sino que cada elemento del parámetro se pasa como un parámetro separado. El número de elementos en la matriz transformada El número es el mismo que el número original de elementos, de lo contrario se informará un error
np.resize(a,nueva_forma)或a.reszie() new_shape solo puede recibir listas y tuplas, y a.resize puede recibir solo o lista y tuplas. El número de elementos de la matriz transformada puede ser diferente al de la matriz original, np.shape se puede llenar repetidamente y a.resize se puede llenar con 0.
np.ravel(a) o a.ravel() Convierta la matriz a en una matriz unidimensional
a.flatten() Convierta la matriz a en una matriz unidimensional
np. apretar (a) Quitar cotas con un elemento
np.transpose(a,axes)或a.transpose() a 为输入的数组。axes为元组 或 列表, 如果指定,它必须是包含[0,1,…,N-1]的排列的元组或列表,其中N是a的轴数,返回数组的第i个轴将与输入的编号为axes [i]的轴相对应。 axes默认为range(a.ndim)[::-1],这将反转轴的顺序。a.transpose功能与np.transpose一样,a.transpose可以接收多个数,元组或列表(这个难以理解,建议使用a.shape来查看使用该函数前后的变化)
np.swapaxes(a, axis1, axis2)或a.swapaxes() 交换axis1和axis2的所代表的两个轴,axis1和axis2都为整数。a.swapaxes也只能接收两个整数。切记这两个函数不能输入两个整数的列表或元组

Numpy统计函数

函数 含义
np.sum(a, axis=None)或a.sum(axis = None) 根据给定轴axis计算数组a相关元素之和,axis整数或元组
np.mean(a, axis=None)或a.mean(axis = None) 根据给定轴axis计算数组a相关元素的期望,axis整数或元组
np.average(a,axis=None,weights=None) 根据给定轴axis计算数组a相关元素的加权平均值
np.std(a, axis=None)或a.std(axis = None) 根据给定轴axis计算数组a相关元素的标准差
np.var(a, axis=None)或a.var(axis = None) 根据给定轴axis计算数组a相关元素的方差
np.min(a,axis=None)或a.min(axis=None) 计算数组a中元素的最大值
np.max(a,axis=None)或a.max(axis=None) 计算数组a中元素的最大值
np.argmin(a,axis=None)或 a.argmin(axis = None) 计算数组a中元素最小值降为一维后的下标
np.argmax(a,axis=None)或 a.argmax(axis = None) 计算数组a中元素最大值降为一维后的下标
np.ptp(a,axis=None)或a.ptp(axis = None) 计算数组a中元素最大值与最小值的差
np.median(a,axis=None)或 a.median(axis = None) 计算数组a中元素的中位数(中值)

Numpy算数操作

函数 含义
x1+x2或np.add(x1,x2) x1与x2相加,x1与x2可以为数值也可以都为数组,数组的时候其shape的尺寸大小要相同
x1-x2或np.subtract(x1,x2) x1减x2,x1与x2可以为数值也可以都为数组,数组的时候其shape的尺寸大小要相同
-x或np.negative(x) 取x的负数,x可以为数值也可以为数组
x1*x2或 np.multiply(x1,x2) x1x与2相乘,x1与x2可以为数值也可以都为数组,数组的时候其shape的尺寸大小要相同
x1/x2或np.divide(x1,x2) x1除以x2,x1与x2可以为数值也可以都为数组,数组的时候其shape的尺寸大小要相同,x2为零的时候,值为inf(无限大)
x1//x2或 np.floor_divide(x1,x2) x1整除x2,x1与x2可以为数值也可以都为数组,数组的时候其shape的尺寸大小要相同
x1**x2或 np.power(x1,x2) x1的x2次方,x1与x2可以为数值也可以都为数组,数组的时候其shape的尺寸大小要相同
x1%x1或 np.mod(x1,x2) x1除以x2的余数,x1与x2可以为数值也可以都为数组,数组的时候其shape的尺寸大小要相同

Numpy比较操作

函数 含义
x1==x2或np.equal(x1,x2) 返回布尔数组
x1!=x2或no.not_equal(x1,x2) 返回布尔数组
x1<x2或np.less(x1,x2) 返回布尔数组
x1<=x2或np.less_equal(x1,x2) 返回布尔数组
x1>x2或np.greater(x1,x2) 返回布尔数组
x1>=x2或 np.greater_equal(x1,x2) 返回布尔数组

Numpy的指数,对数,三角函数

三角函数输入和输出的是弧度制

函数 含义
np.deg2rad 将角度制化为弧度制
np.rad2deg 将弧度制化为角度制

在使用三角函数的时候我们可以先将角度制化为弧度制,再带入三角函数。

函数 含义
np.exp 计算指数(e^x)
np.log,np.log10,np.log2,np.log1p 求以e为底,以10为低,以2为低,以(1+x)为底的对数
np.sign 将数组中的值标签化,大于0的变成1,等于0的变成0,小于0的变成-1
np.cos,np.sin,np.tan 三角函数
np.arccos,np.arcsin,np.arctan 反三角函数

Numpy取整,四舍五入

函数 含义
np.ceil 朝着无穷大的方向取整,比如5.1会变成6,-6.3会变成-6
np.floor 朝着负无穷大方向取证,比如5.1会变成5,-6.3会变成-7
np.rint(a) 四舍五入取整
np.round(a,decimals=0) 返回四舍五入后的值,decimals为小数点后的位数
np.modf 将整数和小数分隔开来形成两个数组
array.astype(‘数据类型’) 转换数组array的数据类型

Numpy矩阵运算

函数 含义
np.dot(a,b) a与b进行数组的行列式相乘
np.linalg.inv(a) 求矩阵a的逆
np.linalg.det(a) 求a的行列式
np.linalg.eig(a) 求a的特征值和特征向量
np.linalg.sval(a) 求a的奇异值分解
np.linalg.norm(a, ord=2, axis=None,) ord=1:求一范数,ord=2:求二范数,ord=np.inf:无穷范数,

Numpy数组合并

函数 含义
np.append(arr, values, axis=None) arr:需要被合并values的数组。values:合并到数组arr中的数组。axis:可选参数,如果axis没有给出,合并后返回值为一维数组。axis被填写,按照axis指定的维度合并(axis填写时arr和values需有相同的shape的尺寸大小)
np.concatenate(arrays, axis=None) array多个数组组成的列表或元组。axis填写后将按照axis指定的维度合并(array中的数组可以是不同的shape的尺寸大小)
np.stack(arrays, axis=0) array多个数组组成的列表或元组。axis填写后将按照axis指定的维度合并(array中的数组需为相同的shape的尺寸大小)
np.hstack(tup) 横向合并,tup多个数组组成的列表或元组。建议使用二维数组,多维数组当shape的尺寸大小不同时有时可以合并,有时不可以。
np.vstack(tup) 竖向合并,tup多个数组组成的列表或元组。

Numpy数组分割

函数 含义
np.split(ary, indices_or_sections, axis=0) ary:要切分的数组。indices_or_sections:如果是一个整数,表示将arry切割为改整数份,如果是一个列表或元组(第一个值不要为0),列表值进行切分。axis:沿着哪个维度进行切向,默认为0,横向切分,1表示竖向切分。
np.hsplit(ary, indices_or_sections) 竖向切分。ary:要切分的数组。indices_or_sections:如果是一个整数,表示将arry切割为改整数份,如果是一个列表或元组(第一个值不要为0),列表值进行切分。
np.vsplit(ary, indices_or_sections) 横向切分。ary:要切分的数组。indices_or_sections:如果是一个整数,表示将arry切割为改整数份,如果是一个列表或元组(第一个值不要为0),列表值进行切分。

Numpy其他函数

函数 含义
np.take(a,indices,axis = None)/a.take() a:要提取的数组。indices;要提取的值的索引的列表。axis=0:抽取相应索引行的数据。axis=1:抽取相应索引列的数据。axis=None:将数组转化为一维数据再进行索引相对应的数据
np.argmax(array, axis=None) /array.argmax(axis=None) array:代表输入数组;axis=0:对array取每一列的最大值的索引,axis=1:对array取每一行的最大值的索引。axis=None:j将array转为一维数据再进行取最大值的索引(axis为1和0所对应的列和行没有写错,它是和别人不同)

np.tensordot讲解

np.tensordot函数是对于高维矩阵进行的内积运算,这个内积的过程不好理解,建议从维度上进行理解就好了

np.tensordot(a,b,axes)

a,b是要进行内积运算的矩阵
axes是矩阵要运算的维度

1.当axes = n时,n为整数时,代表的是a的后n个维度与b的前n个维度进行内积后,a去掉后n个维度,b去掉前n个维度两者再结和的维度,看例子:

首先定义两个矩阵

>>> a = np.random.rand(4,5,3,2)
>>> b = np.random.rand(2,3,5,4)

这里设定axes = 0时代表没有维度去掉,故新矩阵维度为(4, 5, 3, 2, 2, 3, 5, 4)
axes = 1的时候运算后的矩阵的大小为去掉了a的后一个维度与b 的前一个维度故新矩阵维度为(4, 5, 3, 3, 5, 4)

>>> print(np.tensordot(a,b,axes = 0).shape)
(4, 5, 3, 2, 2, 3, 5, 4)
>>> print(np.tensordot(a,b,axes = 1).shape)
(4, 5, 3, 3, 5, 4)

这里是axes = 2的时候,但是a的后2个维度与b的前2各维度不相同,就会报错

>>> print(np.tensordot(a,b,axes = 2).shape)
Traceback (most recent call last):
  File "<pyshell#47>", line 1, in <module>
    print(np.tensordot(a,b,axes = 2).shape)
  File "<__array_function__ internals>", line 200, in tensordot
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\numpy\core\numeric.py", line 1117, in tensordot
    raise ValueError("shape-mismatch for sum")
ValueError: shape-mismatch for sum

修改b的维度使得b的前2个维度与a的后2个维度相同,新矩阵的大小为(4, 5, 5, 4)

>>> b = np.random.rand(3,2,5,4)
>>> print(np.tensordot(a,b,axes = 2).shape)
(4, 5, 5, 4)

2.当axes = [m,n],代表a的m维度与b的n维度进行的内积,新的矩阵大小为去掉a的m维b的n维然后再组合
首先我们看一下a,b的各维度的大小

>>> print(a.shape,b.shape)
(4, 5, 3, 2) (3, 2, 5, 4)

接着尝试内积a的2维b的0维,去掉后可以看见新矩阵的大小为(4, 5, 2, 2, 5, 4)

>>> print(np.tensordot(a,b,axes = [2,0]).shape)
(4, 5, 2, 2, 5, 4)

但是如果想要内积的维度大小不同,会报错

>>> print(np.tensordot(a,b,axes = [1,1]).shape)
Traceback (most recent call last):
  File "<pyshell#61>", line 1, in <module>
    print(np.tensordot(a,b,axes = [1,1]).shape)
  File "<__array_function__ internals>", line 200, in tensordot
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\numpy\core\numeric.py", line 1117, in tensordot
    raise ValueError("shape-mismatch for sum")
ValueError: shape-mismatch for sum

3.如果axes接收的是一个嵌套列表的列表:[[m], [n]],等于说可以选多个维度内积 (注意这里的两个列表相对应的维度的大小要相同),然后去掉a,b相应的维度,再组合
首先查看a,b的各维度大小,接着我们这里想要在大小为5和2的维度上内积,这里一定要注意两个列表中维度大小要相同

>>> print(a.shape,b.shape)
(4, 5, 3, 2) (3, 2, 5, 4)
>>> print(np.tensordot(a,b,axes = [[1,3],[2,1]]).shape)
(4, 3, 3, 4)

结尾

Numpy函数太多了,这里就写了一些比较常用的函数,总结这些函数真是太费时间了,函数的用法我是自己上机实验过,按照自己的理解整理的,内容可能不全,讲解的不够详细。如果你有什么疑惑或不懂的地方,建议亲自实践。以后遇见了更多的函数我会继续补充的。希望大家多多支持。

Supongo que te gusta

Origin blog.csdn.net/m0_59151709/article/details/129355556
Recomendado
Clasificación