Análise de dados - fundamentos numpy (1)

Estou me preparando há muito tempo e quero escrever alguns artigos sobre análise de dados, mas estou ocupado com o trabalho e atualizando um artigo sobre numpy.

Este artigo apresenta principalmente a aplicação de numy, o uso de algumas funções comumente usadas e as operações em arrays e matrizes:

1. O que é entorpecido?

NumPy é uma poderosa biblioteca Python usada principalmente para realizar cálculos em matrizes multidimensionais. O NumPy fornece um grande número de funções e operações de biblioteca, que ajudam os programadores a realizar cálculos numéricos facilmente. Este tipo de cálculo numérico é amplamente utilizado para as seguintes tarefas:

  • Modelo de aprendizado de máquina: ao escrever algoritmos de aprendizado de máquina, você precisa realizar vários cálculos numéricos na matriz. Por exemplo, multiplicação de matrizes, transposição, adição, etc. NumPy fornece uma biblioteca muito boa para cálculos simples (em termos de escrita de código) e rápidos (em termos de velocidade). Matrizes NumPy são usadas para armazenar dados de treinamento e parâmetros de modelo de aprendizado de máquina.

  • Processamento de imagem e computação gráfica: a imagem no computador é representada como uma matriz digital multidimensional. NumPy se torna a escolha mais natural na mesma situação. Na verdade, o NumPy fornece algumas funções de biblioteca excelentes para processar imagens rapidamente.

  • Tarefas matemáticas: o NumPy é muito útil para realizar várias tarefas matemáticas, como integração numérica, diferenciação, interpolação e extrapolação. Portanto, quando se trata de tarefas matemáticas, ele constitui uma alternativa rápida ao MATLAB baseado em Python.

Em segundo lugar, a função em numpy

1 、 np.array () 

array:   o módulo array que vem com o python suporta apenas a criação de arrays unidimensionais , não arrays multidimensionais.

np.array: np.array em   numpy compensa as deficiências de array. O parâmetro dtype especifica o tipo de elementos na 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.arange  ()

função arange:  usada para criar uma matriz de sequência aritmética

np.arange ([iniciar,] parar, [etapa,] dtype = Nenhum)

  • start :   pode ser ignorado e não escrito, o padrão começa em 0; valor inicial

  • stop: o   valor final; o elemento gerado não inclui o valor final

  • passo:   pode ser ignorado, o comprimento do passo padrão é 1; comprimento do passo

  • dtype: o   padrão é Nenhum, defina o tipo de dados do elemento de exibição

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.reshape ()

np.reshape ():  Dê à matriz uma nova forma e os valores dos elementos na matriz permanecerão inalterados

Descrição do parâmetro np.reshape (a, newshape, order = 'C):

  • a: a matriz a ser convertida

  • newshape: valor inteiro ou tupla inteira. A nova forma deve ser compatível com a forma original. Se for um valor inteiro, ele representa o comprimento de uma matriz unidimensional; se for uma tupla, um valor de elemento pode ser -1, então o valor do elemento é representado conforme especificado e será inferido do comprimento da matriz e das dimensões restantes

  • pedido:  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 retorna a dimensão da matriz, apenas um número é retornado

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

5 、 np.shape ()

np.shape ():   Uma tupla representando o tamanho de cada bit. O que é retornado é uma 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 matrizes unidimensionais: A questão é por que não (1, 15), porque a dimensão de a.ndim é 1 e apenas um número é retornado na tupla.

Para uma matriz bidimensional: a frente é uma linha, o verso é uma coluna e seu ndim é 2, então dois números são retornados.

Para um array tridimensional: é difícil ver, para o c impresso acima, veja que estrutura é.

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

Primeiro, olhe para os colchetes externos, incluindo [[1,4,6], [2,5,7]] e [[5,2,1], [4,5,7]], supondo que sejam matrizes respectivamente A, B, você obtém [A, B], se A, B for apenas um número, seu ndim é 2, que é o primeiro número. Mas A e B são matrizes de (2, 3). Assim combinado, esta é a forma de c, que é (2, 2, 3).

Por analogia com este método, as formas de matrizes 4 e 5 dimensionais podem ser derivadas.

6 、 por exemplo, dtype ()

np.dtype ():   Um objeto usado para descrever o tipo de dados de uma matriz. O que é retornado é o tipo de dados da matriz.

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

Como os dados da figura são todos inteiros, todos os retornados são int64. Se houver dados na matriz com um ponto decimal, float64 será retornado.

Alguém pode perguntar: os dados de plástico não deveriam estar intactos? Os dados de ponto flutuante não deveriam ser flutuantes?

Resposta: int32 e float64 são um conjunto de tipos de dados da biblioteca Numpy.

7 、 por exemplo astype ()

np.astype ():   Converte o tipo de dados da 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: O float é um tipo embutido de python, mas Numpy pode ser usado. Numpy mapeia o tipo Python para o dtype equivalente.

Existem outras conversões de tipo (você pode testar por si mesmo):

i nt32 -> float64 completamente ok

float64 -> int32 irá truncar a parte decimal

string -> float64 Se a matriz de string representar todos os números, você também pode usar astype para converter para um tipo numérico

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

np.min ():  Obtenha o menor elemento da matriz

np.max ():  obtém o menor elemento da matriz

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

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

np.zeros ():   define uma matriz com todos os 0 elementos e retorna uma matriz preenchida com 0 da forma e tipo fornecidos

np.ones ():   define uma matriz com todos os 1 elementos e retorna um grupo de matriz preenchido com 2 de uma determinada forma e tipo 

zeros (forma, tipo d = flutuante, ordem = 'C'):

uns (forma, dtype = float, pedido = 'C'):

  • forma : defina a forma da matriz

  • dtype : tipo de dados, parâmetro opcional, o padrão é np.float64

  • pedido : parâmetro opcional (pode ser ignorado)

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.random ()

np.random ():   amostragem aleatória, gerando dados aleatórios

np.random.rand (d0, d1, ...., dn): retorna uma amostra aleatória localizada 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):  retorna uma amostra ou vários valores de amostra, que é uma distribuição normal padrão

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 (baixo [, alto, tamanho]):  retorna uma matriz inteira aleatória no intervalo de baixo <= n <alto, no intervalo semiaberto [baixo, alto)

  • tamanho: tamanho da matriz de número inteiro aleatório

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 (tamanho) :

Return [0.0,1.0) matriz de número aleatório do tamanho especificado, random_sample, ranf, sample são os mesmos.

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 exemplo, linspace ()

np.linspace ():   retorna números uniformemente espaçados (uma matriz) no intervalo especificado, ou seja, retorna uma sequência aritmética

numpy.linspace (start, stop [, num = 50 [, endpoint = True [, retstep = False [,

dtype = Nenhum]]]]]):

  • começo:  ponto de partida

  • parar:  ponto final

  • num: o   número de elementos , o padrão é 50

  • endpoint:  se deseja incluir o valor de parada, o padrão é True, incluindo o valor de parada; se for False, o valor de parada não é incluído

  • retstep:   retorna a forma do valor, o padrão é False, retorna o grupo de sequência aritmética, se for True, retorna o resultado (array ([`samples`,` step`]))

  • dtype:  O tipo de dados do resultado retornado, o padrão é nenhum, caso contrário, consulte o tipo de dados 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 as funções reduzem a matriz multidimensional a uma dimensão, mas a diferença entre as duas é retornar uma cópia ou retornar uma visualização.

np.flatten () retorna uma cópia . As modificações na cópia não afetarão a matriz original

np.ravel () retorna a visão , que afetará a matriz original quando modificada

# 改变数组维度
# 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 a dimensão da 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.transpose ()

np.transpose ():  Matriz de transposição

# 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

Combinação horizontal:

np.hstack (), np.concatenate () ::   Tile na direção 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]]
"""

Combinação vertical:

np.vstack (), np.concatenate (): empilhar na direção 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]]
"""

Combinação detalhada:

np.dstack (): a  combinação de elementos correspondente

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]]])
"""

Combinação de coluna:

np.column_stack (): combinação de fase de coluna correspondente

# 列组合
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]])
"""

Combinação de linha:

np.row_stack (): As  linhas correspondentes são combinadas
 

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

16, a divisão da matriz

Divisão 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]])]
"""

 

Divisão 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]])]
"""

Divisão de profundidade: 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 em números complexos

# 对复数做操作
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. Converter matriz em lista

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

Bem, acima são nossas funções numpy mais usadas. Eu as organizei a tempo. Há muitas que não escrevi. Você pode verificá-las no manual da API do numpy. Atualizarei algumas funções numpy, pandas, matplotlib e seaborn mais tarde. artigo.

 

Se houver algum erro ou falha no artigo, você pode deixar uma mensagem para avisar, obrigado!

 

Observação: leia o código QR abaixo no WeChat e responda "numpy1" em segundo plano para obter o código ^ _ ^

Não é fácil de organizar, espero que você possa clicar e assistir mais ~ Obrigado! ! !

 

Acho que você gosta

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