This shows you the differences between two versions of the page.
ps:labs_python_gpt:01 [2025/09/21 21:26] andrei.gavriliu |
ps:labs_python_gpt:01 [2025/09/21 22:11] (current) andrei.gavriliu |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Introducere în Python ===== | + | ===== Introducere în Python (și ChatGPT) ===== |
În acest laborator vom încerca să ne familiarizăm cu limbajul de programare Python și vom folosi câteva elemente pe care le vom utiliza in cadrul laboratoarelor de procesarea semnalelor. Majoritatea tehnicilor de procesare de semnal pot fi executate ca operații pe vectori și matrici, deci Python este o unealtă foarte folositoare pentru a face aceste operații. | În acest laborator vom încerca să ne familiarizăm cu limbajul de programare Python și vom folosi câteva elemente pe care le vom utiliza in cadrul laboratoarelor de procesarea semnalelor. Majoritatea tehnicilor de procesare de semnal pot fi executate ca operații pe vectori și matrici, deci Python este o unealtă foarte folositoare pentru a face aceste operații. | ||
Line 7: | Line 7: | ||
<note important>Vom folosi versiunea **[[https://www.python.org/downloads/ | Python 3.11]]**</note> | <note important>Vom folosi versiunea **[[https://www.python.org/downloads/ | Python 3.11]]**</note> | ||
- | [[https://colab.research.google.com | Google Colab]] | ||
- | [[https://www.jetbrains.com/pycharm/download | Download Pycharm]] - folosiți versiunea Community care este gratuită | + | |
+ | De asemenea, încurajăm folosirea modelelor de AI precum ChatGPT, Google Gemini sau GitHub Copilot, dar într-un mod constructiv rezolvării laboratoarelor. Utilizarea lor eficientă își dorește să ofere studentului părți din soluție sau idei, atunci când acesta se află în impas și nu soluția completă a laboratorului. | ||
+ | |||
+ | <note tip>**Task:** Generați și afișati o sinusoidă de frecvență 1 Hz peste 1 secundă.</note> | ||
+ | |||
+ | <note warning>**Exemplul unui prompt pentru o abordare ineficientă:** | ||
+ | * Generați și afișati o sinusoidă de frecvență 1 Hz peste 1 secundă. | ||
+ | </note> | ||
+ | |||
+ | <note tip>**Exemplul unui prompt pentru o abordare eficientă:** | ||
+ | * Cum poți defini frecvența?, De ce este relevantă pentru o sinusoidă? | ||
+ | * Ce funcție din Python pot folosi pentru a genera o sinusoidă? | ||
+ | * Ce argumente primește? | ||
+ | * Cum pot afișa sinusoida pe ecran? | ||
+ | </note> | ||
1. Obișnuiți-vă cu mediul de lucru: spațiul de lucru (workspace), editarea scriptului, consola. | 1. Obișnuiți-vă cu mediul de lucru: spațiul de lucru (workspace), editarea scriptului, consola. | ||
Line 15: | Line 29: | ||
* scrieți a = 2 | * scrieți a = 2 | ||
* scrieți b = 3 | * scrieți b = 3 | ||
- | * scrieți print(a+b) | + | * afișați suma (a + b) |
- | * scrieți c=a+b | + | * atribuiți-i lui c suma celor două variabile anterior definite |
- | * scrieți print(c ) | + | * afișați c |
- | * scrieți print(a*b) | + | * afișați a*b |
- | * <nowiki>scrieți print(a**b)</nowiki> | + | * <nowiki>afișați (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 biblioteci. | 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. | ||
Line 34: | Line 48: | ||
* vec1 = [1, 2, 3, 4] # Notați parantezele drepte '[' și ']' necesare pentru a include valori. | * vec1 = [1, 2, 3, 4] # Notați parantezele drepte '[' și ']' necesare pentru a include valori. | ||
* sau putem folosi functia '//array//' din numpy: vec2 = np.array([1, 2, 3, 4]) | * sau putem folosi functia '//array//' din numpy: vec2 = np.array([1, 2, 3, 4]) | ||
- | * Creați un vector cu 7 elemente de unu (folosind funcția '//np.ones//'), iar apoi multiplicați-l cu o constantă. Afișați rezultatul. | + | * Creați un vector cu 7 elemente de unu (verificați documentația numpy pentru funcția corespunzătoare sau ChatGPT), iar apoi multiplicați-l cu o constantă. Afișați rezultatul. |
- | * Creați un vector de 5 valori aleatoare folosind modulul '//np.random//'. | + | * Creați un vector de 5 valori aleatoare folosind un modul corespunzător din numpy. |
* Indexarea în Python pornește de la 0, deci puteți selecta primul element din vector folosind comanda vec1[0]. | * Indexarea în Python pornește de la 0, deci puteți selecta primul element din vector folosind comanda vec1[0]. | ||
* 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. | ||
Line 47: | Line 61: | ||
Î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**. | Î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 (asemănător cu vectorul cu valori random definit anterior). Apoi creați o matrice cu elemente de unu de aceeași dimensiune. Acum adunați cele două matrici și afișați rezultatul. |
<hidden> | <hidden> | ||
Line 60: | Line 74: | ||
4. Transpusa | 4. Transpusa | ||
- | Transpusa unei matrice poate fi obținută prin aplicarea funcției transpose pe o matrice: '//numpy.transpose//'. | + | Transpusa unei matrice poate fi obținută tot cu ajutorul funcțiilor din numpy. |
* Transpuneți matricea pe care ați creat-o mai devreme. | * Transpuneți matricea pe care ați creat-o mai devreme. | ||
- | * Creați un vector coloană cu elemente de unu, folosind funcția '//np.ones//' și modificând parametrul shape cu un număr de elemente mai mare decât unu pentru prima dimensiune. Printați acest vector. | + | * Creați un vector coloană cu elemente de unu, ca la al doilea exercițiu și modificând parametrul shape cu un număr de elemente mai mare decât unu pentru prima dimensiune. Printați acest vector. |
* Acum transpuneți acest vector și printați-l din nou. Care este diferența dintre afișări? | * Acum transpuneți acest vector și printați-l din nou. Care este diferența dintre afișări? | ||
Line 79: | Line 93: | ||
Creați o secvență de 10 elemente, pornind de la 5. | Creați o secvență de 10 elemente, pornind de la 5. | ||
- | * Putem face incrementul diferit de 1, folosind ceva de genul range(1, 10, 3). Încercați și vedeți rezultatul. De asemenea, puteți folosi funcția '//numpy.linspace//' pentru a crea puncte egal distanțate. | + | * Putem face incrementul diferit de 1, folosind ceva de genul range(1, 10, 3). Încercați și vedeți rezultatul. De asemenea, numpy oferă și funcția linspace. |
* Găsiți ce funcție puteți folosi pentru a determina lungimea și dimensiunea vectorilor și matricelor. | * Găsiți ce funcție puteți folosi pentru a determina lungimea și dimensiunea vectorilor și matricelor. | ||
Line 91: | Line 105: | ||
* Creați o variabilă care să conțină șirul de caractere 'Signal processing'. | * Creați o variabilă care să conțină șirul de caractere 'Signal processing'. | ||
- | * Folosiți funcția 'print' pentru a afișa acest șir. | + | * Afișați acest șir. |
* Afișați un șir care conține 'Lab of ', concatenat cu șirul precedent. | * Afișați un șir care conține 'Lab of ', concatenat cu șirul precedent. | ||
* Acum folosiți //fstring// pentru a afișa un șir de caractere, urmat de o cifră aleasă de voi. | * Acum folosiți //fstring// pentru a afișa un șir de caractere, urmat de o cifră aleasă de voi. | ||
Line 103: | Line 117: | ||
<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> | <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// ! | + | * Folosind biblioteca numpy, generați 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// ! |
* Plotați sinusoida pe care ați făcut-o mai devreme folosind funcția '//plt.plot//'. | * Plotați sinusoida pe care ați făcut-o mai devreme folosind funcția '//plt.plot//'. | ||
* Schimbați culoarea liniei sinusoidei. | * Schimbați culoarea liniei sinusoidei. | ||
Line 132: | Line 146: | ||
Task-ul vostru este să încercați să reconstruiți matricea originală a imaginii și să o afișați. Pentru asta trebuie să faceți pașii următori: | Task-ul vostru este să încercați să reconstruiți matricea originală a imaginii și să o afișați. Pentru asta trebuie să faceți pașii următori: | ||
- | * dezarhivați imaginile și încărcați-le în mediul vostru de lucru | ||
* încărcați matricele (puteți folosi funția '//imread//' din modulul '//matplotlib.image//') | * încărcați matricele (puteți folosi funția '//imread//' din modulul '//matplotlib.image//') | ||
- | * afișați cele trei imagini date (matrice) pentru a le vizualiza, folosind funcția '//imshow//' din '//matplotlib.pyplot//', e.g. '//plt.imshow(R1)//'. | + | * afișați cele trei imagini date (matrice) asemenea graficelor, folosind funcția corespunzătoare din matplotlib |
* scădeți cumva matricele 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 |