Tech and thoughts
Python

Working with python matplotlib
Oct 13th
Few weeks ago I tried some examples in Python after reading “Dive into Python”. My first feeling that python is easy to use and allows complex problems to be coded in few lines and minutes is now a certitude. Also there are a lot of libraries that are installed with two clicks and allows python to be used for all types of programming from sites to physics and bioengineering simulations.
Matplotlib is a library that allows easy drawing for series of numerical data in two or three dimensions.
Go to the official page and install it with just a few clicks. Be careful about the python version, there are a lot of differences between them (that is a minus for python).
For exemplification I have extended a previous program that generates pythagorean numbers. Here is the new program that plots points in 3D having as coordinates the pythgorean numbres:
#!/bin/env python import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D #the function to generate the pythgorean numbers(yield is a kind of return) def pythagora(max): a = 1 while(a <= max): b = a+1 while (b <= max): yield (b ** 2 - a ** 2) , (2 * a * b) , (a ** 2 + b ** 2) b += 1 a += 1 fig = plt.figure() ax = Axes3D(fig) #in some versions may be: ax = fig.add_subplot(111, projection='3d') #the arrays to hold the coordinates x = [] y = [] z = [] #here is the iterator in action for li in pythagora(15): x.append(li[0]) y.append(li[1]) z.append(li[2]) #the optional s and c are for dimension and color of the dots ax.scatter( x , y, z, s=5, c='#00688B' ) #this is another type of graphic with lines: #ax.plot( x , y, z, c='c') plt.show()
And here is the result:
You can rotate the graphic with the mouse. You can save it. You can magnify it, also it’s a bit tricky to point where you want in 3D (it’s easier in 2D).
I mentioned in the code the aditional “plot” method which draws lines from one point to the next in the array, but there are also charts and other types of displays and options.
UPDATE: Currently matplotlib does not work in python 3 and requires also the Numpy library to be installed. Try with the python 2.7 and corresponding numpy and matplotlib library.
Python si Pitagora
Nov 18th
M-am gandit sa imi mai imbunatatesc skillurile la algoritmi de programare.
Oricum sunt destul de jos la capitolul asta, dar in scoala imi placea matematica mai “concreta” si mai ales geometria. Si am senzatia ca folosind python e si mai usor sa le pui in practica.
Deocamdata am facut un script care sa calculeze asa numitele numere pitagoreice. Mai exact sunt numere naturale care formeaza laturile unui triunghi dreptunghic.
#!/bin/env python naturale = 1 while(naturale < 100): print 'generat de %d si %d :' % (naturale, naturale + 1) print ' %d patrat + %d patrat = %d patrat' % ( (naturale+1) ** 2 - naturale ** 2 , 2 * naturale * (naturale+1) , naturale ** 2 + (naturale+1)**2 ) naturale = naturale + 1
Sunt primele 100 de triplete (update: nu sunt generate cum trebuie ca sa fie primele). Formula am gasit-o pe wikipedia si am mai aflat ca desi descoperirea lor este atribuita lui Pitagora ele au fost cunoscute intr-o forma sau alta de mai toate civilizatiile.
Incepator in Python
Oct 20th
De putin timp m-am gandit sa incerc un nou limbaj de programare. Pentru ca vreau ceva care sa nu fie special pentru web si care sa nu fie prea departe totusi de modul de lucru cu care m-am obisnuit, am ales Python.
Nu vreau sa-i descriu avantajele ci sa ajut si pe altii care vor sa faca o evaluare rapida. Mi se pare un limbaj bun si pentru cei care nu stiu deloc programare.
Asa ca propun urmatoarea reteta (orientata in special spre utilizatorii de windows):
1. Se descarca ultima versiune standard de Python. Pentru Windows obisnuit(XP sau Vista pe 32 biti) click direct aici
2. Open pe fisierul descarcat, next, next…finish . Nu este nevoie de nici o setare sau alta “customizare”.
3. Se creeaza intr-un director oarecare un fisier text obisnuit si i se schimba extensia din .txt in .py (ceva de genul program.py). Click dreapta pe fisier si click pe “Edit with IDLE”. Se pot folosi si alte editoare de text (ex Notepad) sau mai avansate, dar nu are rost in aceasta etapa.
4. Sunt doua ferestre care apar:
– una cu titlul Python shell, care incepe cu
“Python 2.6” si cateva informatii despre soft urmate de
“IDLE 2.6 ==== No Subprocess ====
>>>” in care va rula programul in modul linie de comanda (este cum ii spune numele o cochilie pentru python, o scurtatura spre python.exe). Poate fi inchisa deocamdata.
– in cealalta fereastra se scrie codul sursa al programului. De exemplu:
print ‘hello world’
Se salveaza (Ctrl+S) si se executa programul apasand F5. Rezultatul se va deschide in ferereastra Python Shell de care am vorbit.
5. Pentru urmatorul pas al retetei click aici. Sunt cateva exercitii graduale care in cateva linii de cod acopera surprinzator de multe aspecte practice ale acestui limbaj. Eu le-am facut pana la exemplul 12 si cred ca pana la 10 le poate intelege si cineva care nu stie prea multe lucruri despre programare.
Limbajul este intuitiv, cu un nucleu minimal de functii ce pot fi extinse prin importul unei variate game de module. Este un limbaj interpretat adica nu necesita compilare si ca si PHP este mai lejer cu tipurile de date(int, string, etc).
Specificul este indentarea(distanta fata de marginea din stanga) folosita in sintaxa (un rand care incepe cu un paragraf mai mare este ierahic inferior unuia cu un paragraf mai mic).
Reteta nu ar trebui sa dureze mai mult de 2 ore, chiar si pentru cineva fara experienta, desi ca sa intelegi unele exemple trebuie sa ai un minim background in programare (poate cateva ore sau cursuri de scoala).
Dupa ce am urmat reteta am facut un programel care sa caute in toate sursele python dintr-un director si sa imi arate toate clasele definite si modulele importate, pe fisiere. Sursa e in continuare(primul rand este pentru cine ruleaza programul pe linux):
#!/bin/env python
import glob
import re
sursepython = glob.glob('*.py')
for fn in sorted(sursepython):
print '----', fn , '----'
for line in open(fn):
#cauta modulele si apoi clasele pe fiecare rand
if re.search(r'import', line):
print ' ' + line
if re.search(r'class', line):
print ' ' + line
Programele pot fi executate si cu dublu-click pe sursa, dar pentru cele de genul acesta nu apuci sa vezi rezultatul.
Pot fi dezvoltate usor si programe cu interfata grafica(ferestre sau GUI pentru cunoscatori :) ). Aici este un punct bun de inceput pentru asta inceput de la zero si explicat pe larg.
Mult spor cu reteta si impartasiti din experienta la gatit!