HOWTO · NumPy

Números imaginários em NumPy Arrays

Este tutorial demonstra como armazenar números imaginários em NumPy Arrays.

Nesta página

Python representa a parte imaginária de um número complexo literal com j, como em 2j. Arrays do NumPy podem armazenar esses valores complexos, realizar operações aritméticas elemento a elemento e expor as partes real e imaginária de cada valor. Use literais complexos quando os valores já forem conhecidos; escolha um dtype complexo ao criar um array com dados reais que precisará armazenar resultados complexos posteriormente.

Criar arrays do NumPy com números complexos

Um número imaginário não tem componente real, enquanto um número complexo combina uma componente real com uma imaginária. O sufixo j do Python indica a parte imaginária: 2j é puramente imaginário, e 1 + 2j tem ambas as componentes. O NumPy infere um tipo de elemento complexo quando um array é criado a partir de literais complexos. Isso é útil quando os dados iniciais já incluem as duas partes.

Execute este exemplo:

import numpy as np

values = np.array([1 + 2j, 3 + 4j, 5 + 6j])
print(values)
[1.+2.j 3.+4.j 5.+6.j]

O array contém três valores. Em cada elemento exibido, o número antes do sinal é a componente real, e o número junto de j é a componente imaginária. A representação compacta do NumPy mostra os valores sem alterar a notação j do Python. Ao escrever um literal, mantenha o sufixo j no termo imaginário. Escrever 1 + 2, por exemplo, criaria um número real comum, pois nenhum dos termos está marcado como imaginário.

Escolher um dtype complexo ao inicializar um array

Quando um array começa com números reais, mas precisa manter resultados complexos posteriormente, escolha um dtype complexo durante a inicialização. Por exemplo, np.ones(3, dtype=complex) cria três elementos de tipo complexo, inicializados com uns reais. Se o NumPy inferir o tipo a partir de dados exclusivamente reais, o array resultante terá um dtype real; atribuir valores complexos a um array real não preserva suas componentes imaginárias. Definir o tipo desde o início evita essa perda e deixa claro o uso pretendido do array.

Essa escolha diz respeito ao tipo dos elementos do array, não a uma operação separada para adicionar uma parte imaginária. Um valor complexo pode ter componente imaginária igual a zero e ainda pertencer a um array de tipo complexo. Por outro lado, um valor que parece real, como 1.0, não torna o array complexo por si só. Use dtype=complex quando os dados de origem forem reais, mas cálculos ou atribuições posteriores precisarem de números complexos. Use literais complexos diretamente quando os valores iniciais já tiverem componentes imaginárias; o NumPy pode inferir o tipo complexo a partir deles.

Fazer operações aritméticas com arrays complexos

O NumPy aplica os operadores aritméticos padrão elemento a elemento quando dois arrays têm formas compatíveis. O exemplo completo a seguir cria dois arrays e calcula a soma, a diferença, o produto e o quociente. Cada resultado é um novo array, e a divisão de números complexos segue as regras usuais da aritmética complexa. Os valores de entrada foram escolhidos deliberadamente para que os elementos do denominador não sejam zero.

Os rótulos exibidos no exemplo permanecem em inglês: “Addition” indica a soma, “Subtraction” a diferença, “Multiplication” o produto e “Division” o quociente.

import numpy as np

left = np.array([1 + 2j, 3 + 4j])
right = np.array([2 + 3j, 4 + 5j])

added = left + right
subtracted = left - right
multiplied = left * right
divided = left / right

print("Addition:", added)
print("Subtraction:", subtracted)
print("Multiplication:", multiplied)
print("Division:", divided)
Addition: [3.+5.j 7.+9.j]
Subtraction: [-1.-1.j -1.-1.j]
Multiplication: [-4. +7.j -8.+31.j]
Division: [0.61538462+0.07692308j 0.7804878 +0.02439024j]

Os arrays têm a mesma forma, então os elementos correspondentes são associados: o primeiro elemento de left é combinado com o primeiro de right, e o mesmo ocorre com o segundo. Essa é uma operação aritmética elemento a elemento, não uma multiplicação de matrizes. Para produtos de matrizes, use uma operação matricial apropriada. A divisão exige atenção aos valores do denominador: um denominador igual a zero não produz um quociente finito, portanto escolha valores adequados ao cálculo que pretende fazer.

Acessar as partes real e imaginária

Para um array complexo do NumPy, .real e .imag fornecem visualizações das componentes real e imaginária, respectivamente. Elas são úteis quando um cálculo posterior precisa de apenas uma componente ou quando você quer examinar as duas partes separadamente. Os arrays de componentes mantêm as mesmas posições dos elementos do array original; portanto, o índice k em cada um corresponde ao índice k no array complexo de origem.

import numpy as np

values = np.array([1 + 2j, 3 + 4j, 5 + 6j])
real_parts = values.real
imaginary_parts = values.imag

print("Real parts:", real_parts)
print("Imaginary parts:", imaginary_parts)

Para os valores deste exemplo, as componentes reais são 1, 3 e 5; as componentes imaginárias são 2, 4 e 6. Esses atributos separam componentes de valores existentes sem alterar o array complexo original. Se precisar construir um array complexo a partir de arrays separados para as partes real e imaginária, combine-os com real_parts + 1j * imaginary_parts; verifique se as entradas correspondentes têm formas compatíveis. A construção com literais, o uso explícito de um dtype complexo, os operadores elemento a elemento e o acesso às componentes abrangem as etapas comuns para trabalhar com valores imaginários em arrays do NumPy.