Interpretowany język do poważnych obliczeń?
Diagonalizacja macierzy $1000\times1000$ ($10^6$ elementów):
%%timeit -n1 -r1
from numpy.linalg import eig
from scipy import random
# Losowa macierz 1000x1000 - 10^6 elementów
M=random.random((1000,1000))
# Symetryzacja
M=(M+M.T)
# Diagonalizacja
V, L=eig(M)
print '\nSuma wartości własnych:', sum(V), '\n'
Suma wartości własnych: 1008.39411105 1 loops, best of 1: 6.69 s per loop
Generacja $10^7$ losowych danych o rozkładzie normalnym i obliczenie histogramu.
%%timeit -n1 -r1
r=random.normal(size=1e7)
hist(r,bins=50,normed=True);
x=linspace(-5,5,100)
plot(x, exp(-x*x/2)/sqrt(2*pi),'r-');
1 loops, best of 1: 1.26 s per loop
Rozwiązanie metodą relaksacyjną
%%timeit -n1 -r1
nx = 50 ; ny = 50; ## Rozmiar siatki
epsilon = 1e-3 ## Próg zbieżnośći
imax = 10000 ## Maksymalna liczba iteracji
T = zeros((nx+1, ny+1)); TN = zeros((nx+1, ny+1)) ## Pole temperatury
T[[0,nx],:] = 100 ## Warunki brzegowe
k=1
while k<imax:
TN[1:-1,1:-1]=(T[:-2,1:-1]+T[2:,1:-1]+T[1:-1,:-2]+T[1:-1,2:])/4.0
errmax=np.max(TN-T)
T[1:-1,1:-1]=TN[1:-1,1:-1]
k+=1
if errmax < epsilon:
print "Zbieżność po ", k, " iteracjach."
break
Zbieżność po 2571 iteracjach. 1 loops, best of 1: 165 ms per loop
X, Y = meshgrid(linspace(0, nx, nx+1), linspace(0, ny, ny+1))
contourf(X, Y, T.T, 64, rstride=1, cstride=1) ; colorbar(); xlabel("X"); ylabel("Y"); show();
Nawet jeśli optymalizacja okazuje się konieczna, to większość logiki programu pozostaje w Pythonie. Optymalizacji wymagają jedynie sekcje krytyczne pod względem wydajności - zazwyczaj nie więcej niż kilka procent kodu.
Interaktywne środowisko pozwalające na tworzenie, testowanie i wykonanie kodu.
Ale także na ...
Pełne (niemal) środowisko służące do tworzenia reprodukowalnych prac naukowych.
%lsmagic
Available line magics: %alias %alias_magic %autocall %automagic %autosave %bookmark %cd %clear %colors %config %connect_info %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %install_default_config %install_ext %install_profiles %killbgscripts %less %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %lsmagic %macro %magic %man %matplotlib %more %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %popd %pprint %precision %profile %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %rep %rerun %reset %reset_selective %run %save %sc %store %sx %system %tb %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode Available cell magics: %%! %%HTML %%SVG %%bash %%capture %%debug %%file %%html %%javascript %%latex %%perl %%prun %%pypy %%python %%python3 %%ruby %%script %%sh %%svg %%sx %%system %%time %%timeit %%writefile Automagic is ON, % prefix IS NOT needed for line magics.
%%ruby
puts "Hello Ruby #{RUBY_VERSION}"
Hello Ruby 1.9.3
%%bash
echo "Jestem BASH ($BASH)"
Jestem BASH (/bin/bash)
%%perl
@numbers = (1, 2, 3, 4, 5, 6);
print $#numbers
5
%%latex
\begin{equation}
i\hbar\frac{\partial}{\partial t} \Psi(\mathbf{r},t) = \left [ \frac{-\hbar^2}{2m}\nabla^2 + V(\mathbf{r},t)\right ] \Psi(\mathbf{r},t)
\end{equation}
Wszystkie te etapy można zrealizować wewnątrz jednego środowiska.
Kilka przykładów zastosowań notesów IPythona:
Zalety
Wady