Transmissão
Antes de explorar as operações matemáticas no NumPy, é fundamental compreender um conceito-chave: broadcasting.
Broadcasting é um método para alinhar as formas dos arrays ao realizar operações aritméticas, sem a necessidade de redimensioná-los manualmente. Em essência, o broadcasting ajusta automaticamente as formas dos arrays.
Quando o NumPy trabalha com dois arrays, ele verifica suas formas para compatibilidade a fim de determinar se podem ser utilizados juntos com broadcasting.
Se dois arrays já possuem o mesmo formato, o broadcasting não é necessário.
Mesmo Número de Dimensões
Suponha que temos dois arrays para os quais desejamos realizar uma adição, com os seguintes formatos: (2, 3) e (1, 3). O NumPy compara os formatos dos dois arrays começando pela dimensão mais à direita e indo para a esquerda. Ou seja, primeiro compara 3 e 3, depois 2 e 1.
Duas dimensões são consideradas compatíveis se forem iguais ou se uma delas for 1:
- Para as dimensões 3 e 3, são compatíveis porque são iguais;
- Para as dimensões 2 e 1, são compatíveis porque uma delas é 1.
Como todas as dimensões são compatíveis, os formatos são considerados compatíveis. Portanto, os arrays podem ser broadcasted, resultando em uma operação padrão de adição entre matrizes do mesmo formato, realizada elemento a elemento.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 2D array with 1 row array_2 = np.array([[11, 12, 13]]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
array_2 é criado como um array 2D contendo apenas uma linha, por isso seu formato é (1, 3).
Mas o que aconteceria se o criássemos como um array 1D com formato (3,)?
Número Diferente de Dimensões
Quando um array possui menos dimensões que o outro, as dimensões ausentes são tratadas como tendo tamanho 1. Por exemplo, considere dois arrays com formatos (2, 3) e (3,). Aqui, 3 = 3, e a dimensão à esquerda ausente é considerada como 1, então o formato (3,) torna-se (1, 3). Como os formatos (2, 3) e (1, 3) são compatíveis, esses dois arrays podem ser transmitidos por broadcasting.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 1D array array_2 = np.array([11, 12, 13]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
Broadcasting de Escalares
Além das operações matemáticas com arrays, também é possível realizar operações semelhantes entre um array e um escalar (número) graças ao broadcasting. Nesse caso, o array pode ter qualquer formato, pois um escalar essencialmente não possui formato, e todas as suas dimensões são consideradas como 1. Portanto, os formatos são sempre compatíveis.
123456import numpy as np array = np.array([[1, 2, 3], [4, 5, 6]]) print(array.shape) # Broadcasting and element-wise addition result = array + 10 print(result)
Formas Incompatíveis
Vamos também considerar um exemplo de formas incompatíveis, onde uma operação aritmética não pode ser realizada porque o broadcasting não é possível:
Temos um array 2x3 e um array 1D de comprimento 2, ou seja, uma forma (2,). A dimensão ausente é considerada como 1, então as formas tornam-se (2, 3) e (1, 2).
Da esquerda para a direita: 3 != 2, então imediatamente temos dimensões incompatíveis e, portanto, formas incompatíveis. Se tentarmos executar o código, receberemos um erro:
12345678import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) array_2 = np.array([11, 12]) print(array_2.shape) # ValueError result = array_1 + array_2 print(result)
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Can you explain more about how broadcasting works with higher-dimensional arrays?
What kind of error message do you get when shapes are incompatible?
Can you give more real-world examples where broadcasting is useful?
Awesome!
Completion rate improved to 3.7
Transmissão
Deslize para mostrar o menu
Antes de explorar as operações matemáticas no NumPy, é fundamental compreender um conceito-chave: broadcasting.
Broadcasting é um método para alinhar as formas dos arrays ao realizar operações aritméticas, sem a necessidade de redimensioná-los manualmente. Em essência, o broadcasting ajusta automaticamente as formas dos arrays.
Quando o NumPy trabalha com dois arrays, ele verifica suas formas para compatibilidade a fim de determinar se podem ser utilizados juntos com broadcasting.
Se dois arrays já possuem o mesmo formato, o broadcasting não é necessário.
Mesmo Número de Dimensões
Suponha que temos dois arrays para os quais desejamos realizar uma adição, com os seguintes formatos: (2, 3) e (1, 3). O NumPy compara os formatos dos dois arrays começando pela dimensão mais à direita e indo para a esquerda. Ou seja, primeiro compara 3 e 3, depois 2 e 1.
Duas dimensões são consideradas compatíveis se forem iguais ou se uma delas for 1:
- Para as dimensões 3 e 3, são compatíveis porque são iguais;
- Para as dimensões 2 e 1, são compatíveis porque uma delas é 1.
Como todas as dimensões são compatíveis, os formatos são considerados compatíveis. Portanto, os arrays podem ser broadcasted, resultando em uma operação padrão de adição entre matrizes do mesmo formato, realizada elemento a elemento.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 2D array with 1 row array_2 = np.array([[11, 12, 13]]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
array_2 é criado como um array 2D contendo apenas uma linha, por isso seu formato é (1, 3).
Mas o que aconteceria se o criássemos como um array 1D com formato (3,)?
Número Diferente de Dimensões
Quando um array possui menos dimensões que o outro, as dimensões ausentes são tratadas como tendo tamanho 1. Por exemplo, considere dois arrays com formatos (2, 3) e (3,). Aqui, 3 = 3, e a dimensão à esquerda ausente é considerada como 1, então o formato (3,) torna-se (1, 3). Como os formatos (2, 3) e (1, 3) são compatíveis, esses dois arrays podem ser transmitidos por broadcasting.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 1D array array_2 = np.array([11, 12, 13]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
Broadcasting de Escalares
Além das operações matemáticas com arrays, também é possível realizar operações semelhantes entre um array e um escalar (número) graças ao broadcasting. Nesse caso, o array pode ter qualquer formato, pois um escalar essencialmente não possui formato, e todas as suas dimensões são consideradas como 1. Portanto, os formatos são sempre compatíveis.
123456import numpy as np array = np.array([[1, 2, 3], [4, 5, 6]]) print(array.shape) # Broadcasting and element-wise addition result = array + 10 print(result)
Formas Incompatíveis
Vamos também considerar um exemplo de formas incompatíveis, onde uma operação aritmética não pode ser realizada porque o broadcasting não é possível:
Temos um array 2x3 e um array 1D de comprimento 2, ou seja, uma forma (2,). A dimensão ausente é considerada como 1, então as formas tornam-se (2, 3) e (1, 2).
Da esquerda para a direita: 3 != 2, então imediatamente temos dimensões incompatíveis e, portanto, formas incompatíveis. Se tentarmos executar o código, receberemos um erro:
12345678import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) array_2 = np.array([11, 12]) print(array_2.shape) # ValueError result = array_1 + array_2 print(result)
Obrigado pelo seu feedback!