Transmissão NumPy

Resumo : neste tutorial, você aprenderá sobre a transmissão NumPy e entenderá como ela funciona.

Introdução à transmissão NumPy

Nos tutoriais anteriores, você aprendeu como realizar operações aritméticas em matrizes de tamanhos iguais usando as funções add(), subtract(), multiply()e ou como operadores , , e .divide()+-*/

Para realizar operações aritméticas em arrays de diferentes formatos, NumPy usa uma técnica chamada radiodifusão.

Por definição, a transmissão é um conjunto de regras para a aplicação de operações aritméticas em matrizes de diferentes formatos. Abordaremos essas regras em detalhes em breve.

Antes disso, vamos dar alguns exemplos simples de transmissão. Por exemplo, você pode usar o operador + para adicionar um número a um array como este:

import numpy as np

a = np.array([1, 2, 3])
b = a + 1
print(b)Linguagem de código:  Python  ( python )

Saída:

[2 3 4]Linguagem de código:  Python  ( python )

Este exemplo adiciona o número um a uma matriz 1D usando o operador +. Internamente, NumPy adiciona o número 1 a cada elemento do array. Essa técnica é chamada de radiodifusão.

Em outras palavras, NumPy transmite o número um na primeira dimensão para corresponder ao formato da matriz 1D.

Conceitualmente, você pode pensar na transmissão acima como equivalente ao seguinte:

import numpy as np

a = np.array([1, 2, 3])
b = a + np.array([1, 1, 1])
print(b)Linguagem de código:  Python  ( python )

Portanto, adicionar o número um a um array 1D é como duplicar o número um em outro array 1D [1, 1, 1] e adicionar esse array ao array:

Transmissão NumPy

No entanto, o NumPy transmite o número um sem duplicá-lo. Ao fazer isso, o NumPy pode gerenciar com eficiência e acelerar o cálculo na maioria dos casos.

Da mesma forma, você pode adicionar um array 1D a um array 2D usando transmissão como esta:

import numpy as np

a = np.array([
    [1, 2, 3],
    [4, 5, 6]
])
b = np.array([10, 20, 30])
c = a + b
print(c)Linguagem de código:  Python  ( python )

Saída:

[[11 22 33]
 [14 25 36]]Linguagem de código:  Python  ( python )

Neste exemplo, NumPy transmite o array 1D batravés da segunda dimensão para corresponder ao formato do array a.

Regras de transmissão NumPy

NumPy define um conjunto de regras para transmissão:

  • Regra 1: se dois arrays tiverem dimensões diferentes, ele preenche aqueles no lado esquerdo da forma do array que tem menos dimensões.
  • Regra 2: se duas dimensões de arrays não corresponderem em nenhuma dimensão, o array com formato igual a um naquela dimensão é esticado (ou transmitido) para corresponder ao formato de outro array.
  • Regra 3: se alguma dimensão de dois arrays não for igual e nenhuma for igual a um, NumPy gera um erro.

Vejamos alguns exemplos para entender essas regras.

1) Transmissão NumPy em um exemplo de array

O exemplo a seguir adiciona uma matriz 2D a uma matriz 1D:

import numpy as np

a = np.array([
    [1, 2, 3],
    [4, 5, 6]
])
b = np.ones(3)
c = a + b
print(c)Linguagem de código:  Python  ( python )

Saída:

[[2. 3. 4.]
 [5. 6. 7.]]Linguagem de código:  Python  ( python )

A tabela a seguir mostra as formas de a e b:

Variedade Forma
a (2,3)
b (3,)

Pela regra 1, como o array b tem menos dimensões, o NumPy preenche um à esquerda:

Variedade Forma
a (2,3)
b (1,3)

Pela regra 2, as primeiras dimensões de duas formas não são iguais, NumPy estica (ou transmite) a primeira dimensão da matriz b para corresponder:

Variedade Forma
a (2,3)
b (2,3)

Agora, as dimensões de ambas as matrizes correspondem. A forma da matriz de resultados é (2,3).

2) Exemplo de transmissão NumPy em ambos os arrays

O exemplo a seguir ilustra o caso em que NumPy transmite ambas as matrizes:

import numpy as np

a = np.array([
    [1],
    [2],
    [3],
])
print(f"a shape: ", a.shape)

b = np.array([1, 2, 3])
print(f"b shape: ", b.shape)

c = a + b
print(c)
print(f"c shape: ", c.shape)Linguagem de código:  Python  ( python )

Saída:

a shape:  (3, 1)
b shape:  (3,)
[[2 3 4]
 [3 4 5]
 [4 5 6]]
c shape:  (3, 3)Linguagem de código:  Python  ( python )

Neste exemplo, a forma das matrizes a e b são (3,1) e (3,) respectivamente.

Variedade Forma
a (3,1)
b (3,)

Pela regra 1, NumPy preenche a forma de b com uns:

Variedade Forma
a (3,1)
b (1,3)

Pela regra 2, NumPy amplia as dimensões de ambos os arrays aeb para corresponder porque ambos são iguais:

Variedade Forma
a (3,3)
b (3,3)

A matriz resultante tem o formato (3,3).

3) Transmissão NumPy com exemplo de erro

O exemplo a seguir adiciona duas matrizes que não são compatíveis:

import numpy as np

a = np.array([
    [1, 2],
    [3, 4],
    [5, 6],
])
print(f"a shape: ", a.shape)

b = np.array([1, 2, 3])
print(f"b shape: ", b.shape)

c = a + bLinguagem de código:  Python  ( python )

Emite o seguinte erro:

a shape:  (3, 2)
b shape:  (3,)
ValueError: operands could not be broadcast together with shapes (3,2) (3,)Linguagem de código:  Python  ( python )

Neste exemplo, a matriz aeb tem as seguintes formas:

Variedade Forma
a (3,2)
b (3,)

Pela regra 1, NumPy preenche a forma do segundo array com uns:

Variedade Forma
a (3,2)
b (1,3)

Pela regra 2, NumPy amplia a primeira dimensão do array b de 1 para 3 para corresponder:

Variedade Forma
a (3,2)
b (3,3)

Pela regra 3, as formas finais não correspondem, portanto, NumPy gera um erro.

Resumo

  • A transmissão NumPy é um conjunto de regras para aplicar operações aritméticas em matrizes de diferentes formatos.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *