Compre o e-book deste material aqui!
Um arranjo numpy.array é um tabelamento de elementos de um mesmo tipo. Os elementos são organizados por eixos indexados (em inglês, axes). Enquanto que nas seções anteriores nos restringimos a arrays unidimensionais (de apenas um eixo), aqui, vamos estudar a alocação e manipulação de arranjos de vários eixos.
A alocação de um numpy.array com mais de um eixo pode ser feita usando-se de listas encadeadas. Por exemplo,
cria o arranjo a de dois eixos, enquanto
cria o arranjo b de três eixos. Para fazer um paralelo com a matemática, o arranjo a é similar (mas, não equivalente) a matriz
(5.32) |
e o arranjo b é similar (mas, não equivalente) ao tensor .
A propriedade .shape é um tuple contendo o tamanho de cada eixo. Por exemplo,
informa que a tem dois eixos, o primeiro com tamanho e o segundo com tamanho . Um paralelo com matrizes, dizemos que a tem duas linhas e três colunas. No caso do arranjo b, temos
o que nos informa tratar-se de um array de três eixos, cada um com tamanho .
O número total de elementos de um array pode ser obtido do atributo numpy.ndarray.size. Por exemplo,
(6, 8)
Os elementos em um arranjo são indexados por eixos e o fatiamento também pode ser feito por eixos. Por exemplo,
No caso do arranjo b de três eixos, temos
O NumPy conta com várias funções para a inicialização de arrays, algumas das mais usadas são:
numpy.zeros inicialização com zeros
numpy.ones inicialização com uns
numpy.empty inicialização com valor da memória
Observamos que o tamanho dos eixos é passado por um tuple.
O NumPy contém várias funções para a manipulação de arrays. Algumas das mais usadas são:
numpy.reshape reformatação de um arranjo.
numpy.concatenate concatena um tuple de arranjos.
De forma análoga a arranjos unidimensionais, as operações aritméticas e funções elementares são aplicadas elemento-a-elementos em um arranjo. Por exemplo,
Dada uma matriz e um vetor , a multiplicação matriz-vetor é definida por
(5.33i) | ||||
(5.33n) |
Considere a matriz
(5.34) |
e o vetor . A multiplicação matriz-vetor é
(5.35g) | ||||
(5.35h) |
Dadas matrizes e , a multiplicação matriz-matriz é a matriz de elementos
(5.36) |
Consideramos as matrizes
(5.37) |
(5.38) |
A multiplicação matriz-matriz é
(5.39j) |
Aloque o arranjo que corresponde a matriz
(5.40) |
Sem implementar, forneça a saída das seguintes instruções:
A[2,1]
A[0,2]
A[-2,-2]
A[3]
A[3:,:]
A[:,2]
A[:,1:2]
Dica: aloque o arranjo e implemente as instruções.
Considere o arranjo
Sem implementar, forneça a saída das seguintes instruções:
A[2,0,1]
A[1,1,0]
A[2]
A[1,2]
A[1:,:2,2]
Dica: aloque o arranjo e implemente as instruções.
Considere o arranjo
Sem implementar, escreva os seguintes arranjos derivados:
a.reshape(6)
a.reshape(2,3)
a.reshape(-1)
a.reshape(-1,3)
a.reshape(3,-1)
a.reshape(4,-1)
Dica: aloque o arranjo e implemente as instruções.
Considere os arranjos
Sem implementar, escreva os seguintes arranjos derivados:
np.concatenate((a,b.reshape(1,-1)))
np.concatenate((a.reshape(-1,1),b))
np.concatenate((a,b.reshape(1,-1)), axis=1)
np.concatenate((a.reshape(-1,1),b), axis=1)
Dica: aloque o arranjo e implemente as instruções.
Implemente uma função que recebe uma matriz (representada por um array) e retorna a sua transposta. Teste seu código para diversas matrizes com diversos formatos.
Implemente uma função que compute a multiplicação vetor-matriz
(5.41a) | ||||
(5.41g) |
onde, por definição, , com elementos
(5.42) |
Dica: a função numpy.dot também computa a multiplicação vetor-matriz. Teste sua implementação para diferentes matriz e vetores de diferentes tamanhos.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a Política de Uso de Dados para mais informações. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!