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)
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)
In [19]:
plt.plot(f[75,:])
Out[19]:
In [20]:
plt.plot(hmax)
#,ylabel='intensidade máxima',xlabel='coluna'),'f.max(0), valor máximo de cada coluna')
Out[20]: