Numpy - operações que reduzem uma dimensão

Uma das categorias de operações matriciais bastante útil do Numpy é a de operações que reduzem uma dimensão da matriz.

Por exemplo, se eu quero calcular o perfil de cinza médio das linhas de uma imagem, é necessário fazer, para cada coluna, uma média entre todos os pixels daquela coluna.

Leia com atenção o tutorial:

O Numpy possui a facilidade de redução de eixo em muitas operações tais como mean, max, min, all, any, sum e tantas outras.

Estas funções permitem passar como parâmetro a dimensão em que o ndarray será reduzido.

Vejamos o exemplo a seguir, agora usando a redução implícita sem a necessidade de fazer o laço anterior:


In [1]:
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np

In [5]:
f = mpimg.imread('../data/cameraman.tif')[:6,:10]  # slice das 6 primeiras linhas e 10 primeiras colunas
print('f=\n', f)
g = f.mean(axis=0)
print('g=\n', g.round(1))
print('f.shape=',f.shape)
print('f.mean(0).shape=',f.mean(axis=0).shape)


f=
 [[169 168 174 175 177 177 181 179 178 183]
 [174 175 176 173 180 179 179 177 181 183]
 [171 178 172 177 177 178 180 182 184 179]
 [170 173 177 171 178 178 183 181 182 180]
 [172 174 174 172 174 175 180 177 182 184]
 [179 175 173 181 178 181 186 181 185 184]]
g=
 [ 172.5  173.8  174.3  174.8  177.3  178.   181.5  179.5  182.   182.2]
f.shape= (6, 10)
f.mean(0).shape= (10,)

Veja o exemplo de cálculo de valor mínimo da uma imagem das teclas da calculadora na página master:tutorial_numpy_1_5a Redução de eixo. Repita a seguir o mesmo exemplo, porém utilizando o perfil máximo no lugar do perfil mínimo:


In [18]:
f = mpimg.imread('../data/keyb.tif')
plt.imshow(f,cmap='gray')
m = f.mean()
print('f.mean', m)
hmax = f.max(axis=0)


f.mean 123.283984124

In [19]:
plt.plot(f[75,:])


Out[19]:
[<matplotlib.lines.Line2D at 0x1149b0438>]

In [20]:
plt.plot(hmax)
#,ylabel='intensidade máxima',xlabel='coluna'),'f.max(0), valor máximo de cada coluna')


Out[20]:
[<matplotlib.lines.Line2D at 0x114a38fd0>]

Teste de autoavaliação

Faça o teste múltipla escolha a seguir para verificar os conhecimentos adquiridos com esta atividade. O teste é para autoestudo e pode ser repetido várias vezes:

  • http://adessowiki.fee.unicamp.br/adesso-1/q/ae2-2/ Teste de autoestudo - Redução de eixo