Numpy Tutorial - NumPy Math Operation and Broadcasting

  1. Operação aritmética NumPy
  2. NumPy Broadcasting

Neste capítulo, vamos cobrir operações em NumPy, como operações aritméticas básicas e operações matriciais.

Vamos começar com a operação aritmética básica.

Operação aritmética NumPy

Adição, subtração, multiplicação e divisão são as operações aritméticas mais básicas na NumPy. Elas são semelhantes às operações aritméticas normais entre números.

import numpy as np
arrayA = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
arrayB = arrayA.T
#array([[1, 2, 3],
#       [4, 5, 6],
#       [7, 8, 9]])

arrayB = arrayA.T
#array([[1, 4, 7],
#       [2, 5, 8],
#       [3, 6, 9]])

arrayA + arrayB
#array([[ 2,  6, 10],
#       [ 6, 10, 14],
#       [10, 14, 18]])

arrayA - arrayB
#array([[ 0, -2, -4],
#       [ 2,  0, -2],
#       [ 4,  2,  0]])

arrayA * arrayB
#array([[ 1,  8, 21],
#       [ 8, 25, 48],
#       [21, 48, 81]])

arrayA / arrayB
#array([[1.        , 0.5       , 0.42857143],
#       [2.        , 1.        , 0.75      ],
#       [2.33333333, 1.33333333, 1.        ]])

Deve-se notar que a operação de multiplicação do array - *, multiplica os elementos na mesma posição nas duas arrays para colocar o elemento na mesma posição do array de resultados. Não é o produto de pontos de duas matrizes dadas que deve ser calculado com o método np.dot.

np.dot(arrayA, arrayB)
#array([[ 14,  32,  50],
#       [ 32,  77, 122],
#       [ 50, 122, 194]])

NumPy Broadcasting

Duas matrizes devem ter a mesma forma na operação matemática do array. Mas NumPy introduz o conceito de radiodifusão para preencher automaticamente o array se possível quando dois arrays não têm a mesma forma.

Deixe-me explicar este conceito com exemplos,

import numpy as np
arrayA = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
arrayA + 1
#array([[ 2,  3,  4],
#       [ 5,  6,  7],
#       [ 8,  9, 10]])

Aqui, 1 é adicionado a todos os elementos de arrayA, ou em outras palavras, 1 é transmitido do formato (1, 1)a mesma forma de arrayA - (3, 3) para tornar a operação de adição de array possível.

A operação real é a seguinte,

arrayA + np.array([[1,1,1],[1,1,1],[1,1,1]])

A radiodifusão em NumPy também poderia ser usada em cenários abaixo,

Duas matrizes têm o mesmo comprimento numa dimensão, e um array tem o comprimento de 1 na outra dimensão

Vamos começar com um exemplo,

arrayC = np.array([10, 11, 12])
arrayA + arrayC
#array([[11, 13, 15],
#       [14, 16, 18],
#       [17, 19, 21]])

A forma de arryA é (3, 3) e a forma de arrayC é (3, 1). Ele atende ao critério de dimensões de array, e os dados na única linha em arrayC serão transmitidos em três linhas para combinar com o formato de arrayA.

Também é aplicável se dois arrays tiverem o mesmo comprimento de linha.

arrayD = np.array([[10],[11],[12]])
#array([[10],
#       [11],
#       [12]])
arrayA + arrayD
#array([[11, 12, 13],
#       [15, 16, 17],
#       [19, 20, 21]])