Análisis de datos: conceptos básicos de numpy (1)

Me he estado preparando durante mucho tiempo y quiero escribir algunos artículos sobre análisis de datos, pero he estado ocupado con el trabajo y estoy ocupado actualizando un artículo sobre numpy.

Este artículo presenta principalmente la aplicación de numy, el uso de algunas funciones de uso común y las operaciones en matrices y matrices:

1. ¿Qué es numpy?

NumPy es una poderosa biblioteca de Python que se utiliza principalmente para realizar cálculos en matrices multidimensionales. NumPy proporciona una gran cantidad de funciones y operaciones de biblioteca, que ayudan a los programadores a realizar cálculos numéricos fácilmente. Este tipo de cálculo numérico se utiliza mucho para las siguientes tareas:

  • Modelo de aprendizaje automático: al escribir algoritmos de aprendizaje automático, debe realizar varios cálculos numéricos en la matriz. Por ejemplo, multiplicación de matrices, transposición, suma, etc. NumPy proporciona una biblioteca muy buena para cálculos simples (en términos de escritura de código) y rápidos (en términos de velocidad). Las matrices NumPy se utilizan para almacenar datos de entrenamiento y parámetros del modelo de aprendizaje automático.

  • Procesamiento de imágenes y gráficos por computadora: la imagen en la computadora se representa como una matriz digital multidimensional. NumPy se convierte en la opción más natural en la misma situación. De hecho, NumPy proporciona algunas funciones de biblioteca excelentes para procesar imágenes rápidamente.

  • Tareas matemáticas: NumPy es muy útil para realizar diversas tareas matemáticas, como integración numérica, diferenciación, interpolación y extrapolación. Por lo tanto, cuando se trata de tareas matemáticas, constituye una alternativa rápida a MATLAB basado en Python.

En segundo lugar, la función en numpy

1 、 np.array () 

matriz:   el módulo de matriz que viene con python solo admite la creación de matrices unidimensionales , no matrices multidimensionales.

np.array: np.array en   numpy compensa las deficiencias de la matriz. El parámetro dtype especifica el tipo de elementos de la matriz.

import numpy as np
# 常规数组创建方法
a1 = np.array([1, 2, 4])
a2 = np.array([[1.0,2.0],[3.0,4.0]])
a3 = np.array([[1,2],[3,4]],dtype=complex) # 指定数据类型,complex复数类型
print(a1,"\n.a2.\n",a2,"\n.a3.\n", a3)
"""
运行结果:
[1 2 4] 
.a2.
 [[1. 2.]
 [3. 4.]] 
.a3.
 [[1.+0.j 2.+0.j]
 [3.+0.j 4.+0.j]]
"
""

2 、 np. Rango  ()

función arange: se  utiliza para crear una matriz de secuencia aritmética

np.arange ([inicio,] parada, [paso,] dtype = Ninguno)

  • inicio :   se puede ignorar y no escribir, el valor predeterminado comienza desde 0; valor inicial

  • stop: el   valor final; el elemento generado no incluye el valor final

  • paso:   se puede ignorar, la longitud de paso predeterminada es 1; longitud de paso

  • dtype: el valor   predeterminado es Ninguno, establezca el tipo de datos del elemento de visualización

nd1 = np.arange(5) #array([0, 1, 2, 3, 4]) 随机生成5个自然数
nd2 = np.arange(1,5) #array([1, 2, 3, 4])
# nd3:1为起点,间隔为2,5为终止点但取不到,(左开右闭取值) 
nd3 = np.arange(1,5,2) 
print(nd1)
print(nd2)
print(nd3)
# 利用字符编码创建数组
# 创建一个单精度浮点数组
m3 = np.arange(7, dtype='f')
print(m3)
# 创建复数数组
m4 = np.arange(7, dtype='D')
print(m4)
"""
运行结果:
nd1: [0 1 2 3 4]
nd2: [1 2 3 4]
nd3: [1 3]
m3: [0. 1. 2. 3. 4. 5. 6.]
m4: [0.+0.j 1.+0.j 2.+0.j 3.+0.j 4.+0.j 5.+0.j 6.+0.j]
"""

3 、 np.rehape ()

np.reshape ():  Dale a la matriz una nueva forma y los valores de los elementos de la matriz permanecen sin cambios

np.reshape (a, newshape, order = 'C) descripción del parámetro:

  • a: la matriz a convertir

  • newshape: valor entero o tupla entera. La nueva forma debe ser compatible con la forma original. Si es un valor entero, representa la longitud de una matriz unidimensional; si es una tupla, el valor de un elemento puede ser -1, entonces el valor del elemento se representa como se especifica y se inferirá de la longitud de la matriz y las dimensiones restantes

  • orden:  opcional (ignorado)

  • a = np.arange(15)
    b = a.reshape(3, 5)
    print(a)
    print("转换后的数组:",b)  #将一维数组转换成为3行5列
    """
    运行结果:
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
    转换后的数组:
    [[ 0  1  2  3  4]
     [ 5  6  7  8  9]
     [10 11 12 13 14]]
    """

    4 、 np.ndim ()

np.ndim ():   ndim devuelve la dimensión de la matriz, solo se devuelve un número

# ndim返回的是数组的维度,返回的只有一个数,该数即表示数组的维度
print("a的维度:",a.ndim)
print("b的维度:",b.ndim)
"""
运行结果:
a的维度:1
b的维度:2
"""

5 、 np. Forma ()

np.shape ():   una tupla que representa el tamaño de cada bit. Lo que se devuelve es una tupla

a = np.arange(15)
b = a.reshape(3, 5)
c = np.array([[[1, 4,6],[2, 5,7]],[[5,2,1],[4, 5,7]]])
print("a,b,c的维度:",a.ndim,b.ndim,c.ndim)
print("数组a:",a)
print("数组b:",b)
print("数组c:",c)
# shape:表示各位维度大小的元组。返回的是一个元组
print("a的维度的大小:",a.shape) # 查看各维度大小的元组
print("b的维度的大小:",b.shape)
print("c的维度的大小:",c.shape)
"""
运行结果:
a,b,c的维度:1 2 3
数组a: [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
数组b:[[ 0  1  2  3  4]
         [ 5  6  7  8  9]
         [10 11 12 13 14]]
数组c: [[[1 4 6]
      [2 5 7]]
     [[5 2 1]
    [4 5 7]]]
a的维度的大小: (15,)
b的维度的大小: (3, 5)
c的维度的大小: (2, 2, 3)
"""

Para matrices unidimensionales: la pregunta es por qué no es (1, 15), porque la dimensión de a.ndim es 1 y solo se devuelve un número en la tupla.

Para una matriz bidimensional: el frente es una fila, la parte posterior es una columna y su ndim es 2, por lo que se devuelven dos números.

Para una matriz tridimensional: es difícil de ver, para la c impresa arriba, vea qué estructura es.

数组c:
[[[1 4 6]
      [2 5 7]]
     [[5 2 1]
    [4 5 7]]]

Primero observe los corchetes externos, incluidos [[1,4,6], [2,5,7]] y [[5,2,1], [4,5,7]], asumiendo que son matrices respectivamente A, B, obtenga [A, B], si A, B es solo un número, su ndim es 2, que es el primer número. Pero A y B son matrices de (2, 3). Así que combinados, esta es la forma de c, que es (2, 2, 3).

Por analogía con este método, se pueden derivar las formas de matrices de 4 y 5 dimensiones.

6 、 por ejemplo, dtype ()

np.dtype ():   un objeto que se utiliza para describir el tipo de datos de una matriz. Lo que se devuelve es el tipo de datos de la matriz.

print("数据类型:",a.dtype) # 查看数据类型
"""
运行结果:
数据类型: int64
"""

Dado que los datos de la figura son todos enteros, todos los devueltos son int64. Si hay datos en la matriz con un punto decimal, se devolverá float64.

Alguien puede preguntar: ¿No deberían los datos plásticos ser int? ¿No deberían los datos de coma flotante ser flotantes?

Respuesta: int32 y float64 son un conjunto de tipos de datos de la biblioteca Numpy.

7 、 p. Ej., Tipo ()

np.astype (): convierte   el tipo de datos de la matriz

vec_1 = np.array(['1','2','3'])
vec_2 = vec_1.astype('float')
print("转换前的类型:",vec_1.dtype)
print(vec_1)
print("转换后的类型:",vec_2.dtype)
print(vec_2)
"""
运行结果:
转换前的类型:<U1
['1' '2' '3']
转换后的类型:float64
[1. 2. 3.]
"""

Nota: El flotador es un tipo de Python incorporado, pero se puede usar Numpy. Numpy mapea el tipo de Python al tipo dtype equivalente.

Hay otros tipos de conversiones (puede probarlo usted mismo):

i nt32 -> float64 completamente bien

float64 -> int32 truncará la parte decimal

cadena -> float64 Si la matriz de cadenas representa todos los números, también puede usar un tipo para convertir a un tipo numérico

8 、 np.min (), np.max ()

np.min ():  obtiene el elemento más pequeño de la matriz

np.max ():  obtiene el elemento más pequeño de la matriz

print("获取数组中最小的值:",b.min())
print("获取数组中最大的值:",b.max())
"""
运行结果:
获取数组中最小的值: 0
获取数组中最大的值: 14
"""

9 、 np.zeros (), np.ones () 

np.zeros ():   establece una matriz con todos los elementos 0 y devuelve una matriz rellena con 0 de la forma y el tipo dados

np.ones ():   establece una matriz con los 1 elementos y devuelve un grupo de matrices lleno con 2 de una forma y tipo determinados 

ceros (forma, dtype = float, order = 'C'):

unos (forma, dtype = float, order = 'C'):

  • forma : establece la forma de la matriz

  • dtype : tipo de datos, parámetro opcional, el valor predeterminado es np.float64

  • orden : parámetro opcional (se puede ignorar)

np.zeros((3,4)) # 设置一个3行4列的0矩阵
np.ones((2,3,4), dtype=np.int32) # 设置一个3行4列的3维的值均为1的矩阵
"""
运行结果:
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],
​
       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]], dtype=int32)
"""

10 、 np. Aleatorio ()

np.random ():   muestreo aleatorio, generación de datos aleatorios

np.random.rand (d0, d1, ...., dn): devuelve una muestra aleatoria ubicada entre [0,1)

np.random.rand() # 返回0~1中的一个随机值
np.random.rand(3, 2)# 返回3行4列的元素值在0~1随机矩阵
"""
运行结果:
np.random.rand() :0.6759565926081442
np.random.rand(3, 2):
array([[0.50718076, 0.55366315, 0.8955532 ],
       [0.78137634, 0.67035372, 0.56846724]])
"""

randn (d0, d1, ... dn):  devuelve una muestra o varios valores de muestra, que es una distribución normal estándar

np.random.randn()
np.random.randn(2,3)
"""
运行结果:
np.random.randn():-1.723572225201004
np.random.randn(2,3):
array([[ 0.5517019 ,  0.94568245, -0.73698193],
       [ 0.18349642, -1.63614097,  0.74157234]])
"""

randint (bajo [, alto, tamaño]):  devuelve una matriz entera aleatoria en el rango de bajo <= n <alto, en el intervalo semiabierto [bajo, alto)

  • tamaño: tamaño de matriz de entero aleatorio

np.random.randint(4, size=8)
np.random.randint(4, size=(2,3))
"""
运行结果:
array([1, 3, 0, 0, 2, 0, 0, 3])
array([[2, 3, 2],
       [0, 0, 0]])
"""

np.random.random (tamaño):

Devuelve [0.0,1.0) matriz de números aleatorios de tamaño especificado, random_sample, ranf, sample son iguales.

np.random.random()
np.random.random(size=[2,3])
np.random.random((2,3)) # 设置一个2行3列的值在0~1之间的矩阵
"""
运行结果:
0.7893031677602365
array([[0.78053854, 0.18131081, 0.82077647],
       [0.43697461, 0.91715564, 0.05549399]])
array([[0.38284667, 0.94033216, 0.10049719],
       [0.08550353, 0.83507381, 0.70694944]])
"""

11 、 por ejemplo, linspace ()

np.linspace ():   devuelve números espaciados uniformemente (una matriz) dentro del rango especificado, es decir, devuelve una secuencia aritmética

numpy.linspace (inicio, parada [, num = 50 [, punto final = True [, retstep = False [,

dtype = Ninguno]]]]]):

  • inicio:  punto de partida

  • parada:  punto final

  • num: el   número de elementos , el predeterminado es 50

  • punto final:  si se debe incluir el valor de detención, el valor predeterminado es Verdadero, incluido el valor de detención; si es Falso, el valor de detención no se incluye

  • retstep:   formulario de valor de retorno, el valor predeterminado es Falso, devuelve el grupo de secuencia aritmética, si es Verdadero, devuelve el resultado (matriz ([`samples`,` step`])),

  • dtype:  el tipo de datos del resultado devuelto, el valor predeterminado es ninguno; de lo contrario, consulte el tipo de datos de entrada.

# linspace创建等差数列的函数,10个值从0到90的等差数列
np.linspace(0 , 90, 10) 
np.linspace(0 , 90, 10, endpoint=False)
np.linspace(0 , 90, 10, retstep =True) # 返回步长
"""
运行结果:
array([ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90.])
array([ 0.,  9., 18., 27., 36., 45., 54., 63., 72., 81.])
(array([ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90.]), 10.0)
"""

12 、 np.ravel (), np.flatten ()

Ambas funciones reducen la matriz multidimensional a una dimensión, pero la diferencia entre las dos es devolver una copia o devolver una vista.

np.flatten () devuelve una copia . Las modificaciones a la copia no afectarán la matriz original

np.ravel () devuelve la vista , que afectará a la matriz original cuando se modifique

# 改变数组维度
# print(b)
w1 = np.array([[1 , 2] , [3 , 4]])
w1_f = w1.flatten() # 将数组展平,flatten函数会请求分配内存来保存结果
w1_r = w1.ravel() # 将数组展平, 返回数组的一个视图
print("w1_f",w1_f)
print("w1_r",w1_r)
# 二者的区别
w1_f[0] = 10
print('w1:' , w1)
w1_r[0] = 10
print('w1:' , w1)
"""
运行结果:
w1_f [1 2 3 4]
w1_r [1 2 3 4]
w1: [[1 2]
     [3 4]]
w1: [[10  2]
     [ 3  4]]
"""

13. np.resize ()

np.resize ():  modifica la dimensión de la matriz

b = np.arange(24).reshape(2,3,4) # 三维坐标
b.shape = (6, 4) # 6X4的多维数组
print(b)
b.resize((2,12))
print(b)
"""
运行结果:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]]
 
 [[ 0  1  2  3  4  5  6  7  8  9 10 11]
 [12 13 14 15 16 17 18 19 20 21 22 23]]
 
"""

14 、 np. Transposición ()

np.transpose ():  matriz de transposición

# transpose转置矩阵
b = np.arange(24).reshape(2,3,4) # 三维坐标
b.shape = (6, 4) # 6X4的多维数组
b.transpose()
"""
运行结果:
array([[ 0,  4,  8, 12, 16, 20],
       [ 1,  5,  9, 13, 17, 21],
       [ 2,  6, 10, 14, 18, 22],
       [ 3,  7, 11, 15, 19, 23]])
"""

15, matriz combinada

Combinación horizontal:

np.hstack (), np.concatenate ():   mosaico en la dirección horizontal

# 组合数组
a = np.arange(9).reshape(3,3)
b = 2 * a
print("a:",a)
print("b:",b)
# 水平组合
hs = np.hstack((a, b))
con_hs = np.concatenate((a,b), axis=1)
print("hs:",hs)
print("con_hs:",con_hs)
"""
运行结果:
a: [[0 1 2][3 4 5] [6 7 8]]
b: [[ 0  2  4][ 6  8 10] [12 14 16]]
hs: [[ 0  1  2  0  2  4]
     [ 3  4  5  6  8 10]
     [ 6  7  8 12 14 16]]
con_hs: [[ 0  1  2  0  2  4]
     [ 3  4  5  6  8 10]
     [ 6  7  8 12 14 16]]
"""

Combinación vertical:

np.vstack (), np.concatenate (): apilar en la dirección vertical

# 垂直组合
vs = np.vstack((a,b))
con_vs = np.concatenate((a,b), axis=0)
print("vs:", vs)
print("con_vs:", con_vs)
"""
运行结果:
a: [[0 1 2][3 4 5] [6 7 8]]
b: [[ 0  2  4][ 6  8 10] [12 14 16]]
vs: [[ 0  1  2][ 3  4  5][ 6  7  8]
     [ 0  2  4][ 6  8 10][12 14 16]]
con_vs: [[ 0  1  2][ 3  4  5][ 6  7  8]
       [ 0  2  4][ 6  8 10] [12 14 16]]
"""

Combinación en profundidad:

np.dstack (): la  combinación de elementos correspondiente

np.dstack((a, b))
"""
运行结果:
a: [[0 1 2][3 4 5] [6 7 8]]
b: [[ 0  2  4][ 6  8 10] [12 14 16]]
array([[[ 0,  0],
        [ 1,  2],
        [ 2,  4]],
​
       [[ 3,  6],
        [ 4,  8],
        [ 5, 10]],
​
       [[ 6, 12],
        [ 7, 14],
        [ 8, 16]]])
"""

Combinación de columnas:

np.column_stack (): combinación de fase de columna correspondiente

# 列组合
oned = np.arange(4)
print(oned)
twice_oned = 2*oned
print(twice_oned)
np.column_stack((oned, twice_oned))
"""
运行结果:
[0 1 2 3]
[0 2 4 6]
array([[0, 0],
       [1, 2],
       [2, 4],
       [3, 6]])
"""

Combinación de filas:

np.row_stack (): Las  filas correspondientes se combinan
 

# 行组合
np.row_stack((oned, twice_oned))
"""
运行结果:
array([[0, 1, 2, 3],
       [0, 2, 4, 6]])
"""

16, la división de la matriz

División horizontal: np.hsplit ()

# 数组的分割
print(a)
np.hsplit(a, 3) # 水平分割
np.split(a, 3, axis=1) # 等价上式
"""
运行结果:
a: [[0 1 2][3 4 5][6 7 8]]
​
分割后的数组:
[array([[0],[3],[6]]), 
  array([[1],[4],[7]]), 
  array([[2],[5],[8]])]
"""

 

División vertical: np.vsplit ()

# 垂直分割
np.vsplit(a, 3)
np.split(a, 3, axis=0) # 等价上式
"""
运行结果:
[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
"""

División de profundidad: np.dsplit ()

# 深度分割
c = np.arange().reshape(3, 3, 3)
print(c)
np.dsplit(c, 3)
"""
运行结果:
[[[ 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]]]
 
 [array([[[ 0], [ 3], [ 6]],
          [[ 9], [12], [15]],
          [[18], [21], [24]]]), 
  array([[[ 1], [ 4], [ 7]],
        [[10], [13],  [16]],
        [[19], [22], [25]]]),
   array([[[ 2], [ 5], [ 8]],
        [[11], [14], [17]],
        [[20], [23], [26]]])]
"""

17. Operar con números complejos

# 对复数做操作
b1 = np.array([1.j+1,2.j+3])
print(b1)
re = b1.real # 给出复数数组的实部
ig = b1.imag  # 给出复数数组的虚部
print("re:",re)
print("ig:",ig)
"""
运行结果:
[1.+1.j 3.+2.j]
re: [1. 3.]
ig: [1. 2.]
"""

18. Convertir matriz en lista

# 数组的转换
# 将数组转换为列表
b1.tolist()
"""
运行结果:
[(1+1j), (3+2j)]
"""

Bueno, las anteriores son nuestras funciones numpy de uso común. Las he organizado en el tiempo. Hay muchas que no he escrito. Puedes consultarlas en el manual de la API de numpy. Actualizaré algunas de numpy, pandas, matplotlib y seaborn más adelante. artículo.

 

Si hay algún error o deficiencia en el artículo, puede dejar un mensaje para señalar, ¡gracias!

 

Nota: Escanee el código QR a continuación en WeChat y responda "numpy1" en segundo plano para obtener el código ^ _ ^

No es fácil de organizar, espero que puedas hacer clic y ver más ~ ¡Gracias! ! !

 

Supongo que te gusta

Origin blog.csdn.net/weixin_39121325/article/details/94379161
Recomendado
Clasificación