This shows you the differences between two versions of the page.
ps:labs_python:01 [2023/10/03 20:47] darius.necula |
ps:labs_python:01 [2023/10/04 09:21] (current) ionut.gorgos |
||
---|---|---|---|
Line 21: | Line 21: | ||
* <nowiki>scrieți print(a**b)</nowiki> | * <nowiki>scrieți print(a**b)</nowiki> | ||
- | Pentru procesarea semnalelor ne vom folosi de bibliotecile **scipy** și **numpy**. Aceastea ne vor ajuta să aplicăm o mulțime de operații matematice vectoriale. Putem defini elementele pe care le folosim cel mai des, precum vectorii și matricele, folosindu-ne de aceaste librării. | + | Pentru procesarea semnalelor ne vom folosi de bibliotecile **scipy** și **numpy**. Aceastea ne vor ajuta să aplicăm o mulțime de operații matematice vectoriale. Putem defini elementele pe care le folosim cel mai des, precum vectorii și matricele, folosindu-ne de aceaste biblioteci. |
<note>Va trebui să importați bibliotecile de care aveți nevoie pentru a le folosi | <note>Va trebui să importați bibliotecile de care aveți nevoie pentru a le folosi | ||
import numpy as np | import numpy as np | ||
Line 39: | Line 39: | ||
* De asemenea, puteți indexa părți din vector: vec1[1:3] pentru a selecta un vector format din al doilea și al treilea element din vec1. | * De asemenea, puteți indexa părți din vector: vec1[1:3] pentru a selecta un vector format din al doilea și al treilea element din vec1. | ||
* vec1[-2:] selectează ultimele 2 elemente din vec1. | * vec1[-2:] selectează ultimele 2 elemente din vec1. | ||
+ | <note>Pentru a beneficia de performanță și de operațiile matematice din $numpy$, vom încerca să folosim mereu numpy arrays.</note> | ||
3. Matrice | 3. Matrice | ||
<note>În Python, putem implementa o matrice ca o listă de liste. Putem trata fiecare element ca o linie a matricei. | <note>În Python, putem implementa o matrice ca o listă de liste. Putem trata fiecare element ca o linie a matricei. | ||
Line 45: | Line 45: | ||
Spre exemplu, <nowiki>X = [[1, 2], [4, 5], [3, 6]]</nowiki> va reprezenta o matrice de 3 pe 2 (3 linii și 2 coloane). Prima linie poate fi selectată ca X[0], iar primul element de pe prima linie poate fi selectat ca X[0][0]. | Spre exemplu, <nowiki>X = [[1, 2], [4, 5], [3, 6]]</nowiki> va reprezenta o matrice de 3 pe 2 (3 linii și 2 coloane). Prima linie poate fi selectată ca X[0], iar primul element de pe prima linie poate fi selectat ca X[0][0]. | ||
- | În continuare ne vom folosi de **numpy.matrix** pentru a crea și manipula matrice. | + | În continuare ne vom folosi de **numpy.array** pentru a crea și a manipula matrice(2D array) sau putem folosi o clasă deprecated, **numpy.matrix**. |
</note> | </note> | ||
* Creați o matrice de 5x4 de numere aleatoare (e.g. folosind '//np.random//' ca mai înainte). Apoi creați o matrice cu elemente de unu de aceeași dimensiune. Acum adunați cele două matrici și afișați rezultatul. | * Creați o matrice de 5x4 de numere aleatoare (e.g. folosind '//np.random//' ca mai înainte). Apoi creați o matrice cu elemente de unu de aceeași dimensiune. Acum adunați cele două matrici și afișați rezultatul. | ||
Line 60: | Line 60: | ||
4. Transpusa | 4. Transpusa | ||
- | Transpusa unei matrice poate fi obținută prin aplicarea funcției transpose pe o matrice: '//numpy.matrix.transpose//'. | + | Transpusa unei matrice poate fi obținută prin aplicarea funcției transpose pe o matrice: '//numpy.transpose//'. |
* Transpuneți matricea pe care ați creat-o mai devreme. | * Transpuneți matricea pe care ați creat-o mai devreme. | ||
Line 98: | Line 98: | ||
În laboratoarele care vor urma va trebui să generăm grafice cu ajutorul cărora vom vizualiza datele noastre. | În laboratoarele care vor urma va trebui să generăm grafice cu ajutorul cărora vom vizualiza datele noastre. | ||
- | <note>Vom folosi matplotlib pentru a genera grafice așa că importați această librărie | + | <note>Vom folosi matplotlib pentru a genera grafice așa că importați această bibliotecă |
import matplotlib.pyplot as plt | import matplotlib.pyplot as plt | ||
</note> | </note> | ||
+ | <note important>Dacă primiți eroare la afișare pe Windows, instalați [[https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2015-2017-2019-and-2022|Microsoft Visual C++ Redistributable]]</note> | ||
* Folosiți funcția '//sin//' pentru a genera o sinusoidă de frecvență 1 Hz peste 1 secundă (astfel încât ar trebui să obțineți o perioadă completă). Pentru asta trebuie să generați intervalul de timp peste [0 ... 1] în pași foarte mici (e.g. 100 de puncte) și apoi să apelați funcția sin(2*pi*f*t) peste această secvență (unde f este frecvența, t este intervalul de timp, iar pi este numărul 3.1415...) pentru a obține sinusoida ca o secvență. Observație: Folosiți //numpy.pi// pentru variabila //pi// ! | * Folosiți funcția '//sin//' pentru a genera o sinusoidă de frecvență 1 Hz peste 1 secundă (astfel încât ar trebui să obțineți o perioadă completă). Pentru asta trebuie să generați intervalul de timp peste [0 ... 1] în pași foarte mici (e.g. 100 de puncte) și apoi să apelați funcția sin(2*pi*f*t) peste această secvență (unde f este frecvența, t este intervalul de timp, iar pi este numărul 3.1415...) pentru a obține sinusoida ca o secvență. Observație: Folosiți //numpy.pi// pentru variabila //pi// ! | ||
Line 125: | Line 126: | ||
9. O aplicație ușoară | 9. O aplicație ușoară | ||
- | În acestă arhivă {{:ps:labs_python:data.zip|data.zip}} aveți trei imagini, reprezentate ca matrici tridimensionale (o matrice per culoare - R, G, B). | + | În acestă arhivă {{:ps:labs_python:data.zip|data.zip}} aveți trei imagini, reprezentate ca matrice tridimensionale (o matrice per culoare - R, G, B). |
Matricile reprezintă o imagine Img_initial care a fost distorsionată prin adăugarea unui zgomot (matricele R1 și R2), prin formula: | Matricile reprezintă o imagine Img_initial care a fost distorsionată prin adăugarea unui zgomot (matricele R1 și R2), prin formula: | ||
IR = Img_initial * 0.3 + R1 * 0.3 + R2 * 0.3 | IR = Img_initial * 0.3 + R1 * 0.3 + R2 * 0.3 | ||
Line 132: | Line 133: | ||
* dezarhivați imaginile și încărcați-le în mediul vostru de lucru | * dezarhivați imaginile și încărcați-le în mediul vostru de lucru | ||
- | * încărcați matricile (puteți folosi funția '//imread//' din biblioteca '//matplotlib.image//') | + | * încărcați matricele (puteți folosi funția '//imread//' din modulul '//matplotlib.image//') |
- | * afișați cele trei imagini date (matrici) pentru a le vizualiza, folosind funcția '//imshow//' din '//matplotlib.pyplot//', e.g. '//plt.imshow(R1)//'. | + | * afișați cele trei imagini date (matrice) pentru a le vizualiza, folosind funcția '//imshow//' din '//matplotlib.pyplot//', e.g. '//plt.imshow(R1)//'. |
- | * scădeți cumva matricile de zgomot | + | * scădeți cumva matricele de zgomot |
* afișați imaginea după ce ați eliminat zgomotul | * afișați imaginea după ce ați eliminat zgomotul | ||
Line 142: | Line 143: | ||
În numpy se foloseste convenția de row-major, deci este indicat să se parcurgă întâi dimensiunea cea mai din dreapta (în cazul matricelor, dimensiunea liniilor). De asemenea, mereu când este posibil, este indicat să se folosească operații vectoriale. | În numpy se foloseste convenția de row-major, deci este indicat să se parcurgă întâi dimensiunea cea mai din dreapta (în cazul matricelor, dimensiunea liniilor). De asemenea, mereu când este posibil, este indicat să se folosească operații vectoriale. | ||
+ | <note important> | ||
+ | În mod default operatorul '*' va face înmulțire element cu element. | ||
+ | Pentru înmulțire de matrici trebuie să folosim funcția 'numpy.dot' sau operatorul '@'. | ||
+ | </note> | ||
<code python> | <code python> |