Quando eu tento
numpy.newaxis
o resultado fornece um quadro de plotagem 2D com eixo x de 0 a 1. No entanto, quando tento usar numpy.newaxis
para fatiar um vetor,
vector[0:4,]
[ 0.04965172 0.04979645 0.04994022 0.05008303]
vector[:, np.newaxis][0:4,]
[[ 0.04965172]
[ 0.04979645]
[ 0.04994022]
[ 0.05008303]]
É a mesma coisa, exceto que ele altera um vetor de linha para um vetor de coluna?
Geralmente, para que serve numpy.newaxis
e em que circunstâncias devemos usá-lo?
python
numpy
multidimensional-array
array-broadcasting
numpy-ndarray
Yue Harriet Huang
fonte
fonte
except that it changes a row vector to a column vector?
O primeiro exemplo não é um vetor de linha. Esse é um conceito do Matlab. Em python, é apenas um vetor unidimensional sem conceito de linha ou coluna. Vectores de linhas ou colunas são 2-dimensonal, como o segundo exemploRespostas:
Simplificando,
numpy.newaxis
é usado para aumentar a dimensão da matriz existente em mais uma dimensão , quando usado uma vez . Portanto,Matriz 1D se tornará matriz 2D
Matriz 2D se tornará matriz 3D
Matriz 3D se tornará matriz 4D
Matriz 4D se tornará matriz 5D
e assim por diante..
Aqui está uma ilustração visual que mostra a promoção da matriz 1D para matrizes 2D.
Cenário-1 :
np.newaxis
pode ser útil quando você deseja converter explicitamente uma matriz 1D em um vetor de linha ou vetor de coluna , conforme mostrado na figura acima.Exemplo:
Cenário 2 : Quando queremos usar a transmissão numpy como parte de alguma operação, por exemplo, ao adicionar algumas matrizes.
Exemplo:
Digamos que você queira adicionar as duas matrizes a seguir:
Se você tentar adicioná-los assim, o NumPy aumentará o seguinte
ValueError
:Nessa situação, você pode usar
np.newaxis
para aumentar a dimensão de uma das matrizes para que o NumPy possa transmitir .Agora adicione:
Como alternativa, você também pode adicionar um novo eixo à matriz
x2
:Agora adicione:
Nota : Observe que obtemos o mesmo resultado nos dois casos (mas um é a transposição do outro).
Cenário-3 : É semelhante ao cenário-1. Porém, você pode usar
np.newaxis
mais de uma vez para promover a matriz para dimensões mais altas. Essa operação às vezes é necessária para matrizes de ordem superior ( ou seja, tensores ).Exemplo:
Mais informações sobre np.newaxis vs np.reshape
newaxis
também é chamado de pseudo-índice que permite a adição temporária de um eixo em uma multiarray.np.newaxis
usa o operador de fatiamento para recriar a matriz enquantonp.reshape
modela a matriz para o layout desejado (assumindo que as dimensões correspondam; e isso é necessário parareshape
que isso aconteça).Exemplo
No exemplo acima, inserimos um eixo temporário entre o primeiro e o segundo eixo de
B
(para usar a transmissão). Um eixo ausente é preenchido aqui usandonp.newaxis
para fazer a operação de transmissão funcionar.Dica geral : Você também pode usar
None
no lugar denp.newaxis
; Estes são de fato os mesmos objetos .PS Veja também esta ótima resposta: newaxis vs remodelar para adicionar dimensões
fonte
O que é
np.newaxis
?O
np.newaxis
é apenas um alias para a constante PythonNone
, o que significa que, onde quer que você use,np.newaxis
você também poderá usarNone
:É apenas mais descritivo se você ler o código que usa em
np.newaxis
vez deNone
.Como usar
np.newaxis
?A
np.newaxis
é geralmente utilizada com o corte. Indica que você deseja adicionar uma dimensão adicional à matriz. A posição donp.newaxis
representa onde eu quero adicionar dimensões.No primeiro exemplo, uso todos os elementos da primeira dimensão e adiciono uma segunda dimensão:
O segundo exemplo adiciona uma dimensão como primeira dimensão e, em seguida, usa todos os elementos da primeira dimensão da matriz original como elementos na segunda dimensão da matriz de resultados:
Da mesma forma, você pode usar múltiplo
np.newaxis
para adicionar várias dimensões:Existem alternativas para
np.newaxis
?Há outra funcionalidade muito semelhante no NumPy:,
np.expand_dims
que também pode ser usada para inserir uma dimensão:Mas, como ele apenas insere
1
s noshape
você, você também pode adicionarreshape
o array a essas dimensões:Na maioria das vezes,
np.newaxis
é a maneira mais fácil de adicionar dimensões, mas é bom conhecer as alternativas.Quando usar
np.newaxis
?Em vários contextos está adicionando dimensões úteis:
Se os dados tiverem um número especificado de dimensões. Por exemplo, se você deseja usar
matplotlib.pyplot.imshow
para exibir uma matriz 1D.Se você deseja que o NumPy transmita matrizes. Ao adicionar uma dimensão que você poderia, por exemplo, obter a diferença entre todos os elementos de um array:
a - a[:, np.newaxis]
. Isso funciona porque as operações NumPy transmitem começando com a última dimensão 1 .Para adicionar uma dimensão necessária para que o NumPy possa transmitir matrizes. Isso funciona porque cada dimensão de comprimento 1 é simplesmente transmitida para o comprimento da dimensão 1 correspondente da outra matriz.
1 Se você quiser ler mais sobre as regras de transmissão, a documentação do NumPy sobre esse assunto é muito boa. Também inclui um exemplo com
np.newaxis
:fonte
Você começou com uma lista unidimensional de números. Depois de usado
numpy.newaxis
, você o transformou em uma matriz bidimensional, consistindo em quatro linhas de uma coluna cada.Você pode usar essa matriz para multiplicar a matriz ou envolvê-la na construção de uma matriz maior de 4 xn.
fonte
newaxis
O objeto na tupla de seleção serve para expandir as dimensões da seleção resultante por uma dimensão de unidade de comprimento .Não é apenas a conversão da matriz de linhas em matriz de colunas.
Considere o exemplo abaixo:
Agora vamos adicionar nova dimensão aos nossos dados,
Você pode ver que
newaxis
adicionou a dimensão extra aqui, x1 tinha dimensão (3,3) e X1_new tem dimensão (3,1,3).Como nossa nova dimensão nos permite diferentes operações:
Adicionando x1_new e x2, obtemos:
Portanto,
newaxis
não é apenas a conversão da linha para a matriz da coluna. Aumenta a dimensão da matriz, permitindo assim fazer mais operações nela.fonte
ndarray
terminologia NumPy.