Python - Matrix

Macierz to szczególny przypadek dwuwymiarowej tablicy, w której każdy element danych ma dokładnie ten sam rozmiar. Zatem każda macierz jest również dwuwymiarową tablicą, ale nie odwrotnie. Macierze są bardzo ważnymi strukturami danych dla wielu obliczeń matematycznych i naukowych. Jak już omówiliśmy dwie struktury danych tablic wymiarowych w poprzednim rozdziale, w tym rozdziale skupimy się na operacjach na strukturach danych specyficznych dla macierzy.

Używamy również pakietu numpy do manipulacji danymi macierzowymi.

Przykład macierzy

Rozważmy przypadek rejestracji temperatury przez 1 tydzień mierzonej rano, w południe, wieczorem i w nocy. Można go przedstawić jako macierz 7X5 przy użyciu tablicy i metody zmiany kształtu dostępnej w numpy.

from numpy import * 
a = array([['Mon',18,20,22,17],['Tue',11,18,21,18],
		   ['Wed',15,21,20,19],['Thu',11,20,22,21],
		   ['Fri',18,17,23,22],['Sat',12,22,20,18],
		   ['Sun',13,15,19,16]])
    
m = reshape(a,(7,5))
print(m)

Powyższe dane można przedstawić jako dwuwymiarową tablicę, jak poniżej.

[['Mon' '18' '20' '22' '17']
 ['Tue' '11' '18' '21' '18']
 ['Wed' '15' '21' '20' '19']
 ['Thu' '11' '20' '22' '21']
 ['Fri' '18' '17' '23' '22']
 ['Sat' '12' '22' '20' '18']
 ['Sun' '13' '15' '19' '16']]

Dostęp do wartości w macierzy

Dostęp do elementów danych w macierzy można uzyskać za pomocą indeksów. Metody dostępu są takie same, jak sposób uzyskiwania dostępu do danych w dwuwymiarowej tablicy.

from numpy import * 
m = array([['Mon',18,20,22,17],['Tue',11,18,21,18],
		   ['Wed',15,21,20,19],['Thu',11,20,22,21],
		   ['Fri',18,17,23,22],['Sat',12,22,20,18],
		   ['Sun',13,15,19,16]])
    
# Print data for Wednesday
print(m[2])

# Print data for friday evening
print(m[4][3])

Wykonanie powyższego kodu daje następujący wynik -

['Wed', 15, 21, 20, 19]
23

Dodawanie wiersza

from numpy import * 
m = array([['Mon',18,20,22,17],['Tue',11,18,21,18],
		   ['Wed',15,21,20,19],['Thu',11,20,22,21],
		   ['Fri',18,17,23,22],['Sat',12,22,20,18],
		   ['Sun',13,15,19,16]])
    
m_r = append(m,[['Avg',12,15,13,11]],0)

print(m_r)

Wykonanie powyższego kodu daje następujący wynik -

[['Mon' '18' '20' '22' '17']
 ['Tue' '11' '18' '21' '18']
 ['Wed' '15' '21' '20' '19']
 ['Thu' '11' '20' '22' '21']
 ['Fri' '18' '17' '23' '22']
 ['Sat' '12' '22' '20' '18']
 ['Sun' '13' '15' '19' '16']
 ['Avg' '12' '15' '13' '11']]

Dodawanie kolumny

Możemy dodać kolumnę do macierzy za pomocą metody insert (). tutaj musimy wspomnieć o indeksie, do którego chcemy dodać kolumnę i tablicy zawierającej nowe wartości dodanych kolumn. W poniższym przykładzie dodajemy nową kolumnę na piątej pozycji od początku.

from numpy import * 
m = array([['Mon',18,20,22,17],['Tue',11,18,21,18],
		   ['Wed',15,21,20,19],['Thu',11,20,22,21],
		   ['Fri',18,17,23,22],['Sat',12,22,20,18],
		   ['Sun',13,15,19,16]])
    
m_c = insert(m,[5],[[1],[2],[3],[4],[5],[6],[7]],1)

print(m_c)

Wykonanie powyższego kodu daje następujący wynik -

[['Mon' '18' '20' '22' '17' '1']
 ['Tue' '11' '18' '21' '18' '2']
 ['Wed' '15' '21' '20' '19' '3']
 ['Thu' '11' '20' '22' '21' '4']
 ['Fri' '18' '17' '23' '22' '5']
 ['Sat' '12' '22' '20' '18' '6']
 ['Sun' '13' '15' '19' '16' '7']]

Usuń wiersz z macierzy

Możemy usunąć wiersz z macierzy za pomocą metody delete (). Musimy określić indeks wiersza, a także wartość osi, która wynosi 0 dla wiersza i 1 dla kolumny.

from numpy import * 
m = array([['Mon',18,20,22,17],['Tue',11,18,21,18],
		   ['Wed',15,21,20,19],['Thu',11,20,22,21],
		   ['Fri',18,17,23,22],['Sat',12,22,20,18],
		   ['Sun',13,15,19,16]])
    
m = delete(m,[2],0)

print(m)

Wykonanie powyższego kodu daje następujący wynik -

[['Mon' '18' '20' '22' '17']
 ['Tue' '11' '18' '21' '18']
 ['Thu' '11' '20' '22' '21']
 ['Fri' '18' '17' '23' '22']
 ['Sat' '12' '22' '20' '18']
 ['Sun' '13' '15' '19' '16']]

Usuń kolumnę z macierzy

Możemy usunąć kolumnę z macierzy za pomocą metody delete (). Musimy określić indeks kolumny, a także wartość osi, która wynosi 0 dla wiersza i 1 dla kolumny.

from numpy import * 
m = array([['Mon',18,20,22,17],['Tue',11,18,21,18],
		   ['Wed',15,21,20,19],['Thu',11,20,22,21],
		   ['Fri',18,17,23,22],['Sat',12,22,20,18],
		   ['Sun',13,15,19,16]])
    
m = delete(m,s_[2],1)

print(m)

Wykonanie powyższego kodu daje następujący wynik -

[['Mon' '18' '22' '17']
 ['Tue' '11' '21' '18']
 ['Wed' '15' '20' '19']
 ['Thu' '11' '22' '21']
 ['Fri' '18' '23' '22']
 ['Sat' '12' '20' '18']
 ['Sun' '13' '19' '16']]

Zaktualizuj wiersz w macierzy

Aby zaktualizować wartości w wierszu macierzy, po prostu ponownie przypisujemy wartości w indeksie wiersza. W poniższym przykładzie wszystkie wartości danych czwartkowych są oznaczone jako zero. Indeks dla tego wiersza to 3.

from numpy import * 
m = array([['Mon',18,20,22,17],['Tue',11,18,21,18],
		   ['Wed',15,21,20,19],['Thu',11,20,22,21],
		   ['Fri',18,17,23,22],['Sat',12,22,20,18],
		   ['Sun',13,15,19,16]])
    
m[3] = ['Thu',0,0,0,0]

print(m)

Wykonanie powyższego kodu daje następujący wynik -

[['Mon' '18' '20' '22' '17']
 ['Tue' '11' '18' '21' '18']
 ['Wed' '15' '21' '20' '19']
 ['Thu' '0' '0' '0' '0']
 ['Fri' '18' '17' '23' '22']
 ['Sat' '12' '22' '20' '18']
 ['Sun' '13' '15' '19' '16']]