[latexpage]
Polinomiais
O NumPy também possui polinomiais em diferentes bases:
Por exemplo, $\quicklatex{size=15} 3x^2+2x-1$ :
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
p = np.poly1d([3, 2, -1])
p(0)
p.roots
p.order
[/pastacode]
ainda:
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
x = np.linspace(0, 1, 20)
y = np.cos(x) + 0.3*np.random.rand(20)
p = np.poly1d(np.polyfit(x, y, 3))
t = np.linspace(0, 1, 200)
plt.plot(x, y, 'o', t, p(t), '-')
[/pastacode]
Veja http://docs.scipy.org/doc/numpy/reference/routines.polynomials.poly1d.html para mais.
Polinomiais em outras bases
NumPy também possui uma interface para polinômios sofisticada que suporta, por exemplo, a base de Chebyshev:
$\quicklatex{size=15} 3x^2+2x-1$
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
p = np.polynomial.Polynomial([-1, 2, 3]) # coeficientes em ordem diferente!
p(0)
p.roots()
p.degree() # Em geral os polinômios sem sempre expõe a ordem
[/pastacode]
Exemplo utilizando polinomiais na base de Chebyshev, para polinômios no domínio [-1,1]:
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
x = np.linspace(-1, 1, 2000)
y = np.cos(x) + 0.3*np.random.rand(2000)
p = np.polynomial.Chebyshev.fit(x, y, 90)
t = np.linspace(-1, 1, 200)
plt.plot(x, y, 'r.')
plt.plot(t, p(t), 'k-', lw=3)
[/pastacode]
Os polinômios de Chebyshev possuem algumas vantagens na interpolação.
Carregando arquivos de dados
Arquivos de texto
Exemplo, populacao.txt
[pastacode lang=”bash” message=”” highlight=”” provider=”manual”]
# ano lebre lince cenoura
1900 30e3 4e3 48300
1901 47.2e3 6.1e3 48200
1902 70.2e3 9.8e3 41500
1903 77.4e3 35.2e3 38200
[/pastacode]
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
data = np.loadtxt('data/populations.txt')
data
np.savetxt('pop2.txt', data)
data2 = np.loadtxt('pop2.txt')
[/pastacode]
Observação: Se o seu arquivo de texto for muito complicado, você pode tentar:
- np.genfromtxt
- Usar as funções de I/O do Python e, por exemplo, expressões regulares para análise (Python é bem adequado para isso).
Imagens
Usando o Matplotlib:
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
import matplotlib.pyplot as plt
img = plt.imread('elefante.png')
img.shape, img.dtype
plt.imshow(img)
plt.savefig('plot.png')
plt.imsave('cinza_elephant', img[:,:,0], cmap=plt.cm.gray)
[/pastacode]
Isso salvou o elefante em escalas de cinzas:
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
plt.imshow(plt.imread('cinza_elephant.png'))
[/pastacode]
Outras bibliotecas:
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
from scipy.misc import imsave
imsave('peq_elephant.png', img[::6,::6])
plt.imshow(plt.imread('peq_elephant.png'), interpolation='nearest')
[/pastacode]
Formato do NumPy
O NumPy possui seu próprio formato de arquivo, não portável mas eficiente:
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
dados = np.ones((3, 3))
np.save('pop.npy', dados)
dados3 = np.load('pop.npy')
[/pastacode]
Outros formatos
- HDF5: h5py, PyTables
- NetCDF: scipy.io.netcdf_file, netcdf4-python, …
- Matlab: scipy.io.loadmat, scipy.io.savemat
- MatrixMarket: scipy.io.mmread, scipy.io.mmread
Entre outros. Se alguém usa certo formato de arquivo, provavelmente existe uma biblioteca python para ele.