NumPy Tutorial - NumPy Math Operation and 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 arrays 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 arrays 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 arrays 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]])
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook