Python: wektory, macierze i tablice z NumPy
w tej lekcji przyjrzymy się kilku ciekawym wskazówkom i sztuczkom do zabawy z wektorami, macierzami i tablicami przy użyciu biblioteki NumPy w Pythonie. Ta lekcja jest bardzo dobrym punktem wyjścia, jeśli zaczynasz naukę danych i potrzebujesz wstępnego matematycznego przeglądu tych komponentów i tego, jak możemy z nimi grać za pomocą NumPy w kodzie.
Biblioteka NumPy pozwala nam wykonywać różne operacje, które muszą być wykonane na strukturach danych często używanych w uczeniu maszynowym i naukach o danych, takich jak wektory, macierze i tablice. Pokażemy tylko najczęstsze operacje z NumPy, które są używane w wielu potokach uczenia maszynowego. Na koniec, proszę zauważyć, że NumPy jest tylko sposobem na wykonywanie operacji, więc operacje matematyczne, które pokazujemy, są głównym tematem tej lekcji, a nie samego pakietu NumPy. Zaczynajmy.
- co to jest wektor?
- Tworzenie macierzy
- używając macierzy rzadkiej
- zastosowanie operacji do wszystkich elementów wektorowych
- Średnia, wariancja i odchylenie standardowe
- Transpozycja macierzy
- spłaszczając macierz
- obliczanie wartości własnych i wektorów własnych
- iloczynów punktowych wektorów
- dodawanie, odejmowanie i mnożenie macierzy
- wniosek
co to jest wektor?
według Google wektor to wielkość mająca zarówno kierunek, jak i wielkość, zwłaszcza określająca położenie jednego punktu w przestrzeni względem drugiego.
wektory są bardzo ważne w uczeniu maszynowym, ponieważ nie tylko opisują wielkość, ale także kierunek funkcji. Możemy utworzyć wektor w NumPy z następującym fragmentem kodu:
row_vector = np.array ()
print(row_vector)
w powyższym fragmencie kodu stworzyliśmy wektor wierszy. Możemy również utworzyć wektor kolumnowy jako:
col_vector = np.array (,,])
print(col_vector)
Tworzenie macierzy
macierz może być po prostu rozumiana jako tablica dwuwymiarowa. Możemy stworzyć macierz z NumPy tworząc tablicę wielowymiarową:
print (matrix)
chociaż macierz jest dokładnie podobna do tablicy wielowymiarowej, struktura danych macierzy nie jest zalecana z dwóch powodów:
- tablica jest standardem, jeśli chodzi o pakiet NumPy
- większość operacji z NumPy zwraca tablice, a nie macierz
używając macierzy rzadkiej
aby przypomnieć, macierz rzadka jest tą, w której większość elementów jest zerowa. Częstym scenariuszem przetwarzania danych i uczenia maszynowego jest przetwarzanie macierzy, w których większość elementów jest zerowa. Na przykład rozważ matrycę, której wiersze opisują każdy film na Youtube, a kolumny reprezentują każdego zarejestrowanego użytkownika. Każda wartość oznacza, czy użytkownik obejrzał film, czy nie. Oczywiście większość wartości w tej macierzy będzie równa zeru. Zaletą macierzy sparse jest to, że nie przechowuje ona wartości, które są zerowe. Skutkuje to ogromną zaletą obliczeniową i optymalizacją pamięci masowej.
stwórzmy macierz spark tutaj:
aby zrozumieć, jak działa kod, przyjrzymy się wynikowi tutaj:
w powyższym kodzie użyliśmy funkcji NumPy do utworzenia skompresowanej macierzy rzadkiego wiersza, w której elementy niezerowe są reprezentowane za pomocą indeksów opartych na zerowym. Istnieją różne rodzaje macierzy rzadkiej, jak:
- skompresowana kolumna sparse
- lista list
- Słownik kluczy
nie będziemy tutaj nurkować w innych macierzach sparse, ale wiemy, że każdy z ich zastosowań jest specyficzny i nikt nie może być określany jako „najlepszy”.
zastosowanie operacji do wszystkich elementów wektorowych
jest to wspólny scenariusz, w którym musimy zastosować wspólną operację do wielu elementów wektorowych. Można to zrobić, definiując lambda, a następnie wektoryzując to samo. Zobaczmy fragment kodu dla tego samego:
,
])
mul_5 = lambda x: x * 5
vectorized_mul_5 = np.vectorize(mul_5)
vectorized_mul_5(matrix)
aby zrozumieć, jak działa kod, przyjrzymy się wynikowi tutaj:
w powyższym fragmencie kodu użyliśmy funkcji vectorize, która jest częścią biblioteki NumPy, aby przekształcić prostą definicję lambda w funkcję, która może przetwarzać każdy kod.element wektora. Ważne jest, aby pamiętać, że vectorize jest tylko pętlą nad elementami i nie ma wpływu na wydajność programu. NumPy pozwala również na nadawanie, co oznacza, że zamiast powyższego złożonego kodu, mogliśmy po prostu zrobić:
i wynik byłby dokładnie taki sam. Chciałem najpierw pokazać część złożoną, w przeciwnym razie pominęłbyś sekcję!
Średnia, wariancja i odchylenie standardowe
dzięki NumPy łatwo jest wykonywać operacje związane ze statystyką opisową na wektorach. Średnia wektora może być obliczona jako:
wariancja wektora może być obliczona jako:
odchylenie standardowe wektora można obliczyć jako:
wyjście powyższych komend na podanej macierzy jest podane tutaj:
Transpozycja macierzy
Transpozycja jest bardzo częstą operacją, o której usłyszysz, gdy będziesz otoczony macierzami. Transpozycja jest tylko sposobem na zamianę wartości kolumnowych i wierszowych macierzy. Należy pamiętać, że wektor nie może być transponowany, ponieważ wektor jest tylko zbiorem wartości, bez kategoryzowania tych wartości w wierszach i kolumnach. Należy pamiętać, że przekształcenie wektora wierszowego w wektor kolumnowy nie jest transponowaniem (na podstawie definicji algebry liniowej, która jest poza zakresem tej lekcji).
na razie odnajdziemy spokój po prostu transponując matrycę. Dostęp do transponowania macierzy za pomocą NumPy jest bardzo prosty:
wyjście powyższego polecenia na podaną macierz jest podane tutaj:
Ta sama operacja może być wykonana na wektorze wierszowym, aby przekonwertować go na wektor kolumnowy.
spłaszczając macierz
możemy przekształcić macierz w tablicę jednowymiarową, jeśli chcemy przetwarzać jej elementy w sposób liniowy. Można to zrobić za pomocą następującego fragmentu kodu:
wyjście powyższego polecenia na podanej macierzy jest podane tutaj:
zauważ, że macierz flatten jest jednowymiarową tablicą, po prostu liniową.
obliczanie wartości własnych i wektorów własnych
wektory własne są bardzo często używane w pakietach uczenia maszynowego. Tak więc, gdy funkcja przekształcenia liniowego jest przedstawiona jako macierz, to X, wektory własne są wektorami, które zmieniają się tylko w skali wektora, ale nie w jego kierunku. Możemy powiedzieć, że:
tutaj X jest macierzą kwadratową, a γ zawiera wartości własne. Ponadto v zawiera wektory własne. Dzięki NumPy można łatwo obliczyć wartości własne i wektory własne. Oto fragment kodu, w którym demonstrujemy to samo:
wyjście powyższego polecenia na podanej macierzy jest podane tutaj:
iloczynów punktowych wektorów
iloczynów punktowych wektorów jest sposobem mnożenia 2 wektorów. Mówi o tym, ile wektorów jest w tym samym kierunku, w przeciwieństwie do iloczynu krzyżowego, który mówi ci odwrotnie, jak mało wektorów jest w tym samym kierunku (zwanym ortogonalnym). Możemy obliczyć iloczyn punktowy dwóch wektorów, jak podano w fragmencie kodu tutaj:
b = np.array ()
np.kropka(a, b)
wyjście powyższego polecenia na podane tablice jest podane tutaj:
dodawanie, odejmowanie i mnożenie macierzy
dodawanie i odejmowanie wielu macierzy jest dość prostą operacją w macierzach. Można to zrobić na dwa sposoby. Spójrzmy na fragment kodu, aby wykonać te operacje. W celu utrzymania tego prostego, użyjemy tej samej macierzy dwa razy:
następnie dwie macierze można odjąć jako:
wyjście powyższego polecenia na podaną macierz jest podane tutaj:
zgodnie z oczekiwaniami, każdy z elementów w macierzy jest dodawany/odejmowany z odpowiednim elementem. Mnożenie macierzy jest podobne do znajdowania iloczynu punktowego, jak to zrobiliśmy wcześniej:
powyższy kod znajdzie prawdziwą wartość mnożenia dwóch macierzy, podaną jako:
wyjście powyższego polecenia na podaną macierz jest podane tutaj:
wniosek
w tej lekcji przeszliśmy przez wiele operacji matematycznych związanych z wektorami, macierzami i tablicami, które są powszechnie stosowane w przetwarzaniu danych, statystyce opisowej i nauce o danych. Była to szybka lekcja obejmująca tylko najczęstsze i najważniejsze sekcje szerokiej gamy pojęć, ale operacje te powinny dać bardzo dobry obraz tego, jakie wszystkie operacje mogą być wykonywane podczas radzenia sobie z tymi strukturami danych.
podziel się swoją opinią na temat lekcji na Twitterze z @linuxhint i @sbmaggarwal (to ja!).