Ghid pentru matrice în Python

Ghid pentru matrice în Python

Introducere

Imaginați-vă că aveți o listă de redare cu melodiile preferate pe telefon. Această listă de redare este o listă în care fiecare melodie este plasată într-o anumită ordine. Puteți reda prima melodie, săriți la a doua, săriți la a cincea și așa mai departe. Această listă de redare seamănă mult cu o matrice în programarea computerelor.

Array-urile reprezintă una dintre cele mai fundamentale și mai utilizate structuri de date.

În esență, o matrice este o modalitate structurată de a stoca mai multe elemente (cum ar fi numere, caractere sau chiar alte matrice) într-o anumită ordine și puteți accesa, modifica sau elimina rapid orice element dacă îi cunoașteți poziția (indexul).

În acest ghid, vă vom oferi o imagine de ansamblu cuprinzătoare a structurii de date ale matricei. În primul rând, vom arunca o privire la ce sunt matricele și care sunt principalele lor caracteristici. Vom trece apoi în lumea Python, explorând modul în care matricele sunt implementate, manipulate și aplicate în scenarii din lumea reală.

Înțelegerea structurii datelor matrice

Matricele sunt printre cele mai vechi și fundamentale structuri de date utilizate în informatică și programare. Simplitatea lor, combinată cu eficiența lor în anumite operațiuni, le face un subiect de bază pentru oricine se adâncește în domeniul gestionării și manipulării datelor.

O matrice este o colecție de elemente, de obicei din acelasi tip, stocat in locații de memorie învecinate.

Această stocare contiguă permite matricelor să ofere acces în timp constant la orice element, având în vedere indexul acestuia. Fiecare element dintr-o matrice se numește an element, iar poziția unui element în matrice este definită de acesta index, care de obicei incepe de la zero.

De exemplu, luați în considerare o matrice de numere întregi: [10, 20, 30, 40, 50]. Aici, elementul 20 are un indice de 1:

indexarea matricei python

Există mai multe Avantajele de a folosi matrice pentru a stoca datele noastre. De exemplu, datorită aspectului memoriei, matricele permit O (1) complexitate în timp (constant) la accesarea unui element prin indexul său. Acest lucru este deosebit de benefic atunci când avem nevoie de acces aleatoriu la elemente. În plus, matricele sunt stocate în locații de memorie învecinate, ceea ce poate duce la o mai bună localitate a memoriei cache și la îmbunătățirea performanței generale în anumite operațiuni. Un alt avantaj notabil al utilizării matricelor este că, deoarece matricele au o dimensiune fixă ​​odată declarată, este mai ușor să gestionați memoria și să evitați depășirile neașteptate sau erorile de lipsă de memorie.

notițe: Matricele sunt utile în special în scenariile în care dimensiunea colecției este cunoscută dinainte și rămâne constantă, sau unde accesul aleatoriu este mai frecvent decât inserările și ștergerile.

Pe de altă parte, matricele vin cu propriul set de limitări. Una dintre limitările principale ale matricelor tradiționale este lor marime fixa. Odată ce o matrice este creată, dimensiunea acesteia nu poate fi modificată. Acest lucru poate duce la probleme precum irosirea memoriei (dacă matricea este prea mare) sau nevoia de redimensionare (dacă matricea este prea mică). În plus, inserarea sau ștergerea unui element în mijlocul unui tablou necesită deplasarea elementelor, ceea ce duce la O (n) complexitatea timpului pentru aceste operațiuni.

Pentru a rezuma toate acestea, să ilustrăm principalele caracteristici ale matricelor folosind exemplul de playlist de cântece de la începutul acestui ghid. Un tablou este o structură de date care:

  • Este indexat: Așa cum fiecare melodie din lista dvs. de redare are un număr (1, 2, 3, ...), fiecare element dintr-o matrice are un index. Dar, în majoritatea limbajelor de programare, indexul începe la 0. Deci, primul element este la indexul 0, al doilea la indexul 1 și așa mai departe.

  • Are dimensiune fixă: Când creați o listă de redare pentru, de exemplu, 10 melodii, nu puteți adăuga a 11-a melodie fără a elimina mai întâi una. În mod similar, matricele au o dimensiune fixă. Odată ce creați o matrice de o anumită dimensiune, nu puteți adăuga mai multe elemente decât capacitatea acesteia.

  • Este Omogen: Toate melodiile din lista dvs. de redare sunt piese muzicale. În mod similar, toate elementele dintr-o matrice sunt de același tip. Dacă aveți o matrice de numere întregi, nu puteți stoca brusc un șir de text în ea.

  • Are Acces Direct: Dacă doriți să ascultați a șaptea melodie din lista dvs. de redare, puteți sări direct la ea. În mod similar, cu matrice, puteți accesa instantaneu orice element dacă îi cunoașteți indexul.

  • Memoria contiguă: Acesta este un pic mai tehnic. Când o matrice este creată în memoria unui computer, aceasta ocupă un bloc continuu de memorie. Gândește-te la asta ca la un rând de dulapuri adiacente în școală. Fiecare dulap este lângă celălalt, fără goluri între ele.

Python și Arrays

Python, cunoscut pentru flexibilitatea și ușurința sa de utilizare, oferă mai multe moduri de a lucra cu matrice. În timp ce Python nu are o structură nativă de date cu matrice ca și alte limbi, oferă alternative puternice care pot funcționa în mod similar și chiar oferă capabilități extinse.

La prima vedere, Lista lui Python ar putea părea sinonim cu o matrice, dar există diferențe subtile și nuanțe de luat în considerare:

Listă Mulțime
O structură de date Python încorporată Nu sunt native în Python - provin din modulul `array`
Dimensiune dinamică Dimensiune fixă ​​(predefinită).
Poate deține articole de diferite tipuri de date Țineți articole de același tip
Furnizați o gamă de metode încorporate pentru manipulare Trebuie să importați module externe
O(1) complexitatea timpului pentru operațiunile de acces O(1) complexitatea timpului pentru operațiunile de acces
Consumă mai multă memorie Memoria mai eficientă

Privind acest tabel, este firesc să întrebi: „Când să folosești pe care?”. Ei bine, dacă aveți nevoie de o colecție care poate crește sau micșora dinamic și poate conține tipuri de date mixte, lista lui Python este calea de urmat. Cu toate acestea, pentru scenariile care necesită o colecție mai eficientă din punct de vedere al memoriei cu elemente de același tip, ați putea lua în considerare utilizarea programului Python. array module sau biblioteci externe precum NumPy.

mulțime Modul în Python

Când majoritatea dezvoltatorilor se gândesc la matrice în Python, adesea se gândesc implicit la liste. Cu toate acestea, Python oferă o structură de matrice mai specializată prin încorporarea sa array modul. Acest modul oferă o stocare eficientă din punct de vedere al spațiului a tipurilor de date de bază în stil C în Python.

În timp ce listele Python sunt incredibil de versatile și pot stoca orice tip de obiect, uneori pot fi exagerate, mai ales atunci când trebuie să stocați doar o colecție de tipuri de date de bază, cum ar fi numere întregi sau flotanți. The array modulul oferă o modalitate de a crea matrice care sunt mai eficiente în memorie decât listele pentru anumite tipuri de date.

Crearea unui Array

Pentru a utiliza array modul, mai întâi trebuie să-l importați:

from array import array

Odată importat, puteți crea o matrice folosind array() constructor:

arr = array('i', [1, 2, 3, 4, 5])
print(arr)

Aici 'i' argument indică faptul că matricea va stoca semnată numere întregi. Există mai multe alte coduri de tip disponibile, cum ar fi 'f' pentru plutitoare si 'd' pentru dublu.

Accesarea și modificarea elementelor

Puteți accesa și modifica elemente dintr-o matrice exact așa cum ați face cu o listă:

print(arr[2]) 

Și acum, să modificăm elementul schimbându-i valoarea în 6:

arr[2] = 6
print(arr) 

Metode de matrice

array modulul oferă mai multe metode de a manipula matrice:

  • append() – Adaugă un element la sfârșitul matricei:

    arr.append(7)
    print(arr) 
  • extend() – Adaugă elemente iterabile la sfârșit:

    arr.extend([8, 9])
    print(arr) 
  • pop() – Îndepărtează și returnează elementul în poziția dată:

    arr.pop(2)
    print(arr) 
  • remove(): elimină prima apariție a valorii specificate:

    arr.remove(2)
    print(arr) 
  • reverse(): inversează ordinea matricei:

    arr.reverse()
    print(arr) 

Notă: Există mai multe metode decât am enumerat aici. Consultați documentația oficială Python pentru a vedea o listă cu toate metodele disponibile în array modul.

În timp ce array modulul oferă o modalitate mai eficientă din punct de vedere al memoriei de a stoca tipuri de date de bază, este esențial să-l amintiți limitări. Spre deosebire de liste, matricele sunt omogen. Aceasta înseamnă că toate elementele din matrice trebuie să fie de același tip. De asemenea, puteți doar stoca tipuri de date de bază în stil C în matrice. Dacă trebuie să stocați obiecte personalizate sau alte tipuri Python, va trebui să utilizați o listă sau o altă structură de date.

NumPy Arrays

NumPy, prescurtare pentru Numerical Python, este un pachet de bază pentru calcule numerice în Python. Una dintre caracteristicile sale principale este puternica Obiect matrice N-dimensional, care oferă operații rapide pe matrice, inclusiv manipulare matematică, logică, forme și multe altele.

Matricele NumPy sunt mai versatile decât Python încorporat array modul și sunt o bază în proiectele de știință a datelor și de învățare automată.

De ce să folosiți NumPy Arrays?

Primul lucru care îmi vine în minte este performanță. Matricele NumPy sunt implementate în C și permit stocarea eficientă a memoriei și operațiuni mai rapide datorită algoritmilor optimizați și beneficiilor stocării de memorie contigue.

În timp ce listele și tablourile încorporate din Python sunt unidimensionale, tablourile NumPy pot fi multidimensională, făcându-le ideale pentru reprezentarea matricelor sau tensoarelor.

Consultați ghidul nostru practic și practic pentru a învăța Git, cu cele mai bune practici, standarde acceptate de industrie și fisa de cheat incluse. Opriți căutarea pe Google a comenzilor Git și de fapt învăţa aceasta!

În cele din urmă, NumPy oferă o gamă largă de funcții pentru a opera pe aceste matrice, de la aritmetică de bază la operații matematice avansate, remodelare, împărțire și multe altele.

Notă: Când cunoașteți dimensiunea datelor în avans, pre-alocarea memoriei pentru matrice (în special în NumPy) poate duce la îmbunătățiri de performanță.

Crearea unei matrice NumPy

Pentru a utiliza NumPy, mai întâi trebuie să-l instalați (pip install numpy) și apoi importați-l:

import numpy as np

Odată importat, puteți crea o matrice NumPy folosind array() funcţie:

arr = np.array([1, 2, 3, 4, 5])
print(arr) 

De asemenea, puteți crea matrice multidimensionale:

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix)

Aceasta ne va oferi:

[[1 2 3] [4 5 6] [7 8 9]]

Pe lângă aceste moduri de bază prin care putem crea matrice, NumPy ne oferă și alte moduri inteligente prin care putem crea matrice. Una dintre ele este arange() metodă. Acesta creează matrice cu valori care cresc în mod regulat:

arr = np.arange(10)
print(arr) 

Un altul este linspace() metoda, care creează matrice cu un număr specificat de elemente, distanțate în mod egal între valorile de început și de sfârșit specificate:

even_space = np.linspace(0, 1, 5)
print(even_space) 

Accesarea și modificarea elementelor

Accesarea și modificarea elementelor dintr-o matrice NumPy este intuitivă:

print(arr[2]) arr[2] = 6
print(arr) 

Procedând cam la fel pentru matricele multidimensionale:

print(matrix[1, 2]) matrix[1, 2] = 10
print(matrix)

Se va modifica valoarea elementului din al doilea rând (index 1) și a treia coloană (index 2):

[[1 2 3] [4 5 20] [7 8 9]]

Schimbarea formei unui tablou

NumPy oferă multe funcții și metode de manipulare și operare pe matrice. De exemplu, puteți utiliza reshape() metoda de a schimba forma unui tablou. Să presupunem că avem o matrice simplă:

import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
print("Original Array:")
print(arr) 

Și vrem să o remodelăm într-o matrice 3×4. Tot ce trebuie să faci este să folosești reshape() metoda cu dimensiunile dorite transmise ca argumente:


reshaped_arr = arr.reshape(3, 4)
print("Reshaped Array (3x4):")
print(reshaped_arr)

Aceasta va avea ca rezultat:

Reshaped Array (3x4):
[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]

Înmulțirea matriceală

numpy.dot() metoda este folosita pentru multiplicarea matricei. Returnează produsul punctual a două matrice. Pentru tablourile unidimensionale, este produs intern a matricelor. Pentru tablourile bidimensionale, este echivalent cu multiplicarea matricei, iar pentru ND, este a produs suma peste ultima axă a primei matrice și penultima a celei de-a doua matrice.

Să vedem cum funcționează. Mai întâi, să calculăm produsul punctual al a două matrice 1-D (produsul interior al vectorilor):

import numpy as np vec1 = np.array([1, 2, 3])
vec2 = np.array([4, 5, 6])
dot_product_1d = np.dot(vec1, vec2) print("Dot product of two 1-D arrays:")
print(dot_product_1d) 

Aceasta va avea ca rezultat:

Dot product of two 1-D arrays:
32

32 este, de fapt, produsul interior al celor două matrice – (14 + 25 + 3*6). În continuare, putem efectua multiplicarea matriceală a două tablouri 2-D:


mat1 = np.array([[1, 2], [3, 4]])
mat2 = np.array([[2, 0], [1, 3]])
matrix_product = np.dot(mat1, mat2) print("Matrix multiplication of two 2-D arrays:")
print(matrix_product) 

Care ne va oferi:

Matrix multiplication of two 2-D arrays:
[[ 4 6] [10 12]]

Matricele NumPy reprezintă un pas semnificativ față de listele încorporate din Python și array modul, în special pentru calcule științifice și matematice. Eficiența lor, combinată cu funcționalitatea bogată oferită de biblioteca NumPy, le face un instrument indispensabil pentru oricine dorește să facă operații numerice în Python.

Concluzie

Array-urile, o piatră de temelie a informaticii și a programării, și-au dovedit valoarea în mod repetat în diferite aplicații și domenii. În Python, această structură fundamentală a datelor, prin diferitele sale încarnări, cum ar fi listele, array modulul și puternicele matrice NumPy, oferă dezvoltatorilor un amestec de eficiență, versatilitate și simplitate.

Pe parcursul acestui ghid, am călătorit de la conceptele de bază ale matricelor la aplicațiile lor practice în Python. Am văzut cum matricele, cu natura lor adiacentă la memorie, oferă timpi de acces rapid și cum listele dinamice ale lui Python aduc un strat suplimentar de flexibilitate. De asemenea, am pătruns în lumea specializată a NumPy, unde matricele se transformă în instrumente puternice pentru calcul numeric.

Timestamp-ul:

Mai mult de la Stackabuse