HOWTO · NumPy
Adicionar um eixo a um array NumPy com numpy.newaxis
O numpy.newaxis pode ser usado para adicionar uma nova dimensão a um array NumPy em Python.
Nesta página
numpy.newaxis adiciona um eixo de tamanho um a um array quando é usado em uma expressão de indexação. Coloque-o antes do eixo existente para formar uma linha ou depois dele para formar uma coluna. Para um array unidimensional com forma (4,), essas opções resultam, respectivamente, em (1, 4) e (4, 1). Os valores originais mantêm a mesma ordem; a indexação altera a forma do array ao inserir um eixo.
Adicionar um eixo a um array NumPy com numpy.newaxis
Em indexações do NumPy, numpy.newaxis é um alias para o objeto None do Python. Não é um método que se chama com parênteses. A documentação de numpy.newaxis descreve essa constante de indexação. Em um índice, array[np.newaxis, :] coloca um novo eixo no início, enquanto array[:, np.newaxis] o coloca depois do eixo original. Os dois-pontos mantêm todos os valores ao longo desse eixo original.
Execute este exemplo com o NumPy instalado:
import numpy as np
values = np.array([1, 2, 3, 4])
print(values.shape)
row = values[np.newaxis, :]
column = values[:, np.newaxis]
print(row.shape)
print(column.shape)
(4,)
(1, 4)
(4, 1)
A primeira forma representa um eixo com quatro elementos. Na forma de linha, o eixo inserido no início tem comprimento um, e o eixo original continua com comprimento quatro. Na forma de coluna, o eixo original com quatro elementos vem primeiro, e o eixo inserido tem comprimento um. Por isso, as formas são (1, 4) e (4, 1): os elementos da forma seguem a ordem dos eixos e não representam um conjunto diferente de valores. Ter uma forma bidimensional não transforma os dados, por si só, em um tipo especial de matriz; o NumPy continua representando-os como um array.
Você pode escrever os mesmos dois índices usando None: values[None, :] cria a forma de linha, e values[:, None] cria a forma de coluna. Escolha a grafia que deixe o código ao redor mais claro. numpy.newaxis também pode adicionar um eixo a arrays que já têm várias dimensões. Sua posição no índice determina onde o novo eixo de tamanho um aparece na forma resultante. Por isso, compare as posições no índice com a forma antes de depender de uma operação posterior.
Adicionar um eixo é útil quando outra operação exige que as dimensões se alinhem, inclusive em algumas operações de broadcasting. O eixo adicionado tem comprimento um e pode ser expandido por broadcasting quando as outras dimensões são compatíveis; adicioná-lo não torna automaticamente compatíveis todos os pares de arrays. Para escolher entre linha e coluna, comece pela forma resultante e pela ordem de eixos exigida pela operação seguinte. Assim, fica mais fácil entender a indexação e evitar presumir que as duas formas são intercambiáveis.
Para um array com forma (2, 3), matrix[:, :, None] acrescenta um eixo ao final e resulta na forma (2, 3, 1), enquanto matrix[None, :, :] acrescenta um eixo no início e resulta em (1, 2, 3). Nos dois casos, os dois eixos originais mantêm a ordem e os comprimentos. Ao usar várias posições no índice, anote a forma original e marque onde aparece cada None ou numpy.newaxis. Isso permite prever a nova forma antes de passar o array para outra função. Os blocos de exemplo exibem apenas tuplas de formas, como (4,), (1, 4) e (4, 1); não imprimem rótulos.