Python Samouczek NumPy dla początkujących
⚡ Inteligentne podsumowanie
NumPy jest podstawą Python Biblioteka do obliczeń numerycznych, obsługująca tablice, macierze, algebrę liniową i losowe próbkowanie. Ten samouczek NumPy przeprowadzi Cię przez proces instalacji, tworzenia tablic i resha.ping, krojenie, statystyka i matematyka macierzowa z możliwością uruchomienia Python przykłady.

W czym jest NumPy Python?
numpy jest oprogramowaniem typu open source Python Biblioteka do programowania matematycznego, naukowego, inżynierskiego i analizy danych. Jest to bardzo przydatna biblioteka do operacji matematycznych i statystycznych w Python. Działa doskonale z tablicami wielowymiarowymi i mnożeniem macierzy, a także łatwo integruje się z C/C++ oraz Fortran.
NumPy to narzędzie niezbędne do każdego projektu naukowego. Został stworzony do obsługi tablic N-wymiarowych, algebry liniowej, generowania liczb losowych, transformacji Fouriera i wielu innych zadań.
NumPy daje Python Najwyższej klasy obsługa tablic i macierzy wielowymiarowych oraz bogaty zestaw operacji matematycznych, które na nich działają. W tym przewodniku omówimy podstawowe funkcje, które musisz znać, zanim przejdziesz do samouczka „TensorFlow".
Dlaczego warto używać NumPy?
NumPy jest wydajny pod względem pamięci, dzięki czemu może obsługiwać duże ilości danych liczbowych łatwiej niż czysty Python listy. Jest to również bardzo wygodne do mnożenia i przekształcania macierzy.pingi jest szybki, ponieważ większość pracy jest delegowana do skompilowanych procedur C. W rzeczywistości biblioteki takie jak TensorFlow, PyTorch i Scikit-learn wykorzystują tablice NumPy do obliczeń macierzowych w swoim zapleczu, co sprawia, że NumPy jest cichym koniem roboczym większości nowoczesnych procesów związanych z nauką o danych i sztuczną inteligencją.
Jak zainstalować NumPy
Aby zainstalować bibliotekę NumPy, zapoznaj się z naszym samouczkiem Jak zainstalować TensorFlow. NumPy jest domyślnie instalowany z Anacondą.
W rzadkim przypadku, gdy pakiet NumPy nie jest zainstalowany, użyj dowolnej z poniższych opcji.
Możesz zainstalować NumPy za pomocą Anacondy:
conda install -c anaconda numpy
- In Jupyter Notebook:
import sys
!conda install --yes --prefix {sys.prefix} numpy
Użytkownicy Pip mogą przeprowadzić instalację lub aktualizację za pomocą jednego polecenia:
pip install --upgrade numpy
Zaimportuj NumPy i sprawdź wersję
Polecenie importowania numpy to:
import numpy as np
Powyższy wiersz zmienia nazwę przestrzeni nazw NumPy na np. Ten skrót pozwala na dodawanie prefiksów do funkcji, metod i atrybutów NumPy np. zamiast typing numpy.i jest to standardowa konwencja, którą można znaleźć w całym ekosystemie NumPy.
Aby sprawdzić zainstalowaną wersję NumPy, użyj poniższego polecenia:
print(np.__version__)
Wyjście:
2.1.3
NumPy 2.0 ukazało się w czerwcu 2024 roku i jest obecnie stabilną wersją głównej serii. Jeśli Twój projekt nadal zależy od API 1.x, przypnij do numpy<2 w pliku wymagań, ponieważ niektóre starsze aliasy, takie jak np.float zostały usunięte w wersji 2.0.
Czym są sterowniki Python Tablica NumPy?
Tablice NumPy wyglądają trochę jak Python Na pierwszy rzut oka wyglądają jak listy, ale zachowują się zupełnie inaczej. Dla czytelników, którzy nie znają tematu, wyjaśnijmy, czym jest ndarray i dlaczego jest tak ważny.
Jak sama nazwa wskazuje, tablica NumPy jest centralną strukturą danych biblioteki NumPy. Sama nazwa jest skrótem od „Numeric” (liczba). Python” lub „Numeryczne Python”, a ndarray jest jednorodnym blokiem pamięci o stałym rozmiarze, znanym kształcie i typie danych.
Tworzenie tablicy NumPy
Najprostszym sposobem utworzenia tablicy w NumPy jest rozpoczęcie od Python Lista.
myPythonList = [1,9,8,3]
przekonwertować Python lista do tablicy NumPy za pomocą np.array.
numpy_array_from_list = np.array(myPythonList)
Wyświetl zawartość tablicy.
numpy_array_from_list
Wyjście:
array([1, 9, 8, 3])
W praktyce nie ma potrzeby deklarowania a Python najpierw wypisz. Te dwa kroki można połączyć.
a = np.array([1,9,8,3])
UWAGA: W dokumentacji NumPy wspomniano również np.ndarray, ale np.array jest funkcją fabrycznie zalecaną do codziennego użytku.
W ten sam sposób można również utworzyć tablicę NumPy z krotki.
Matematyczny Operacje na tablicy
Możesz wykonywać operacje matematyczne, takie jak dodawanie, podpisywanietracdzielenie, dzielenie i mnożenie tablicy. Składnia to nazwa tablicy, po której następuje operator (+, -, *, /), po którym następuje operand. Operacje te są wektoryzowane, co oznacza, że NumPy stosuje je do każdego elementu bez jawnego Python pętla.
Przykład:
numpy_array_from_list + 10
Wyjście:
array([11, 19, 18, 13])
Operacja ta dodaje 10 do każdego elementu tablicy NumPy.
Kształt tablicy
Możesz sprawdzić kształt tablicy za pomocą shape Atrybut, do którego dostęp uzyskuje się poprzez dołączenie go do nazwy tablicy. W ten sam sposób można sprawdzić typ za pomocą dtype.
import numpy as np a = np.array([1,2,3]) print(a.shape) print(a.dtype) (3,) int64
Liczba całkowita to wartość bez przecinka. Jeśli utworzysz tablicę z liczbami dziesiętnymi, typ danych zmieni się na float.
#### Different type b = np.array([1.1,2.0,3.2]) print(b.dtype) float64
2-wymiarowa tablica
Możesz dodać wymiar, umieszczając przecinek w nawiasach.
Należy pamiętać, że krotki wewnętrzne muszą znajdować się wewnątrz zewnętrznych nawiasów [].
### 2 dimension c = np.array([(1,2,3), (4,5,6)]) print(c.shape) (2, 3)
3-wymiarowa tablica
Wyższe wymiary można skonstruować w ten sam sposób.
### 3 dimension d = np.array([ [[1, 2,3], [4, 5, 6]], [[7, 8,9], [10, 11, 12]] ]) print(d.shape) (2, 2, 3)
| Cel | Code |
|---|---|
| Utwórz tablicę | tablica([1,2,3]) |
| wydrukuj kształt | tablica([.]).kształt |
Co to jest numpy.zeros()?
liczba.zera() or np.zeros jest Python funkcja służąca do tworzenia macierzy wypełnionej zerami. numpy.zeros() jest przydatne, gdy trzeba zainicjować wagi podczas pierwszej iteracji w TensorFlow lub skonfigurować bufory zastępcze dla innych zadań statystycznych.
Funkcja numpy.zeros() Składnia
numpy.zeros(shape, dtype=float, order='C')
Python numpy.zeros() Parametry
Tutaj,
- Shape: kształt tablicy zer NumPy.
- Typ D: typ danych elementów. Jest opcjonalny, a jego wartość domyślna to
float64. - Zamówienie:domyślnie jest
C, który jest układem wierszowo-głównym używanym przeznumpy.zeros()in Python.
Python numpy.zeros() Przykład
import numpy as np np.zeros((2,2))
Wyjście:
array([[0., 0.], [0., 0.]])
Przykład numpy zero z typem danych
import numpy as np np.zeros((2,2), dtype=np.int16)
Wyjście:
array([[0, 0], [0, 0]], dtype=int16)
Co to jest numpy.ones()?
funkcja np.ones(). tworzy macierz wypełnioną jedynkami. numpy.ones() in Python jest użyteczny, gdy inicjujesz wagi podczas pierwszej iteracji w TensorFlow i przy innych zadaniach statystycznych.
Python numpy.ones() Składnia
numpy.ones(shape, dtype=float, order='C')
Python Parametry numpy.ones().
Tutaj,
- Shape: kształt np.ones Python Szyk.
- Typ D: typ danych elementów. Jest opcjonalny, a jego wartość domyślna to
float64. - Zamówienie:domyślnie jest
C, który jest układem rzędowym.
Python numpy.ones() Tablica 2D z przykładem typu danych
import numpy as np np.ones((1,2,3), dtype=np.int16)
Wyjście:
array([[[1, 1, 1], [1, 1, 1]]], dtype=int16)
Funkcja numpy.reshape() w Python
Python Zmień kształt NumPy Zmienia kształt tablicy bez zmiany jej danych. Może być konieczne przekształcenie danych z formatu szerokiego na długi lub przejście z wektora 1D do macierzy 2D przed przekazaniem ich do modelu. np.reshape funkcja obsługuje to w jednym wywołaniu.
Składnia np.reshape()
numpy.reshape(a, newShape, order='C')
Tutaj,
a:tablica, którą chcesz zmienić.
nowy kształt:nowy pożądany kształt.
Zamówienie:domyślnie jest C, układ rzędowy.
Przykład zmiany kształtu NumPy
import numpy as np e = np.array([(1,2,3), (4,5,6)]) print(e) e.reshape(3,2)
Wyjście:
// Before reshape [[1 2 3] [4 5 6]]
//After Reshape array([[1, 2], [3, 4], [5, 6]])
numpy.flatten() w Python
Python Spłaszcz NumPy Zwraca kopię tablicy skondensowanej do jednego wymiaru. Podczas pracy z sieciami neuronowymi, takimi jak sieci konwolucyjne, często zachodzi potrzeba spłaszczenia tensora obrazu przed przekazaniem go do gęstej warstwy. np.flatten() funkcja obsługuje to w jednym wywołaniu.
Składnia np.flatten()
numpy.flatten(order='C')
Tutaj,
Zamówienie:domyślnie jest C, układ rzędowy.
Przykład NumPy Flatten
e.flatten()
Wyjście:
array([1, 2, 3, 4, 5, 6])
Do czego służy numpy.hstack()? Python?
numpy.hstack jest Python Funkcja służąca do poziomego układania sekwencji tablic wejściowych w jedną tablicę. Z hstack(), dodajesz dane wzdłuż osi kolumn. To bardzo wygodna funkcja w NumPy, gdy trzeba scalić wektory cech obok siebie.
Uczmy się hstack in Python z przykładem.
Przykład:
## Horizontal Stack import numpy as np f = np.array([1,2,3]) g = np.array([4,5,6]) print('Horizontal Append:', np.hstack((f, g)))
Wyjście:
Horizontal Append: [1 2 3 4 5 6]
Do czego służy numpy.vstack()? Python?
numpy.vstack jest Python Funkcja służąca do pionowego układania sekwencji tablic wejściowych w jedną tablicę. Z vstack(), dodajesz dane wzdłuż osi wiersza, co jest przydatne, gdy chcesz połączyć partie próbek.
Przyjrzyjmy się temu na przykładzie.
Przykład:
## Vertical Stack import numpy as np f = np.array([1,2,3]) g = np.array([4,5,6]) print('Vertical Append:', np.vstack((f, g)))
Wyjście:
Vertical Append: [[1 2 3] [4 5 6]]
Po zapoznaniu się z NumPy vstack oraz hstack, przyjrzyjmy się przykładowi generującemu liczby losowe w NumPy.
Generuj losowo Numbers za pomocą NumPy
Aby wygenerować liczby losowe z rozkładu Gaussa, użyj:
numpy.random.normal(loc, scale, size)
Tutaj,
- Miejsce: średnia. Środek rozkładu.
- Skala: odchylenie standardowe.
- Rozmiar: liczba zwróconych próbek.
Przykład:
## Generate random numbers from a normal distribution normal_array = np.random.normal(5, 0.5, 10) print(normal_array) [5.56171852 4.84233558 4.65392767 4.946659 4.85165567 5.61211317 4.46704244 5.22675736 4.49888936 4.68731125]
Jeśli wykreślić rozkład, będzie on wyglądał podobnie do poniższego wykresu.

Należy pamiętać, że nowszy kod coraz częściej korzysta z nowoczesnego interfejsu API generatora, np.random.default_rng(), który jest zalecanym zamiennikiem starszej wersji np.random.normal wywołania w NumPy 2.x.
Funkcja tablicy NumPy
asarray() Funkcja konwertuje dane wejściowe na tablicę. Dane wejściowe mogą być listą, krotką, tablicą obiektów (ndarray) lub podobną sekwencją.
Składnia:
numpy.asarray(data, dtype=None, order=None)
Tutaj,
dane: dane, które chcesz przekonwertować na tablicę.
dtyp: Opcjonalnie. Jeśli nie określono, typ danych jest wnioskowany na podstawie danych wejściowych.
Zamówienie:domyślnie jest C, układ wierszowo-główny. Inną opcją jest F (Fortrakolumna główna typu n).
Przykład:
Rozważmy poniższą macierz 2D z czterema wierszami i czterema kolumnami, wypełnioną wartością 1.
import numpy as np A = np.matrix(np.ones((4,4)))
Jeśli próbujesz zmienić wartość w macierzy poprzez np.array, oryginał nie jest modyfikowany. Powód jest taki, że np.array tworzy kopię macierzy.
np.array(A)[2]=2 print(A) [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]]
Macierz pozostaje niezmieniona. Użyj asarray gdy chcesz zmodyfikować oryginalną tablicę w miejscu. Zobaczmy, co się stanie, gdy ustawisz trzeci wiersz na wartość 2.
np.asarray(A)[2]=2 print(A)
Code Wyjaśnienie:
np.asarray(A) konwertuje macierz A do widoku tablicy.
[2] wybiera trzeci wiersz.
Wyjście:
[[1. 1. 1. 1.] [1. 1. 1. 1.] [2. 2. 2. 2.] # new value [1. 1. 1. 1.]]
Co to jest numpy.arange()?
numpy.arange() to wbudowana funkcja NumPy, która zwraca tablicę ndarray zawierającą równomiernie rozmieszczone wartości w zdefiniowanym przedziale. Na przykład, aby utworzyć wartości od 1 do 10, możesz wywołać np.arange() in Python.
Składnia:
numpy.arange(start, stop, step, dtype)
Python Parametry NumPy:
- Rozpocznij: początek interwału dla
np.arangein Python. - Stop:koniec interwału.
- Krok : odstęp między wartościami. Domyślny krok to 1.
- Typ D:typ tablicy wyjściowej dla NumPy
arange.
Przykład:
import numpy as np np.arange(1, 11)
Wyjście:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
Przykład:
Aby zmienić krok w tym NumPy arange Na przykład, dodaj trzecią liczbę do nawiasów. Zmieni to rozmiar kroku.
import numpy as np np.arange(1, 14, 4)
Wyjście:
array([ 1, 5, 9, 13])
Funkcja NumPy Linspace
linspace zwraca równomiernie rozmieszczone próbki pomiędzy dwoma punktami końcowymi.
Składnia:
numpy.linspace(start, stop, num, endpoint)
Tutaj,
- Rozpocznij:wartość początkowa sekwencji.
- Stop: wartość końcowa sekwencji.
- Ilość: liczba próbek do wygenerowania. Domyślnie 50.
- Punkt końcowy: gdyby
True(Domyślne)stopjest ostatnią wartością. JeśliFalse,stopnie jest zawarty.
Przykład:
Można go na przykład użyć do utworzenia 10 równomiernie rozmieszczonych wartości od 1 do 5.
import numpy as np np.linspace(1.0, 5.0, num=10)
Wyjście:
array([1. , 1.44444444, 1.88888889, 2.33333333, 2.77777778, 3.22222222, 3.66666667, 4.11111111, 4.55555556, 5. ])
Jeżeli nie chcesz uwzględniać ostatniej cyfry w przedziale, ustaw endpoint do False.
np.linspace(1.0, 5.0, num=5, endpoint=False)
Wyjście:
array([1. , 1.8, 2.6, 3.4, 4.2])
Funkcja LogSpace NumPy w Python
logspace zwraca równomiernie rozmieszczone liczby w skali logarytmicznej. logspace ma takie same parametry jak np.linspace.
Składnia:
numpy.logspace(start, stop, num, endpoint)
Przykład:
np.logspace(3.0, 4.0, num=4)
Wyjście:
array([ 1000. , 2154.43469003, 4641.58883361, 10000. ])
Na koniec, jeśli chcesz sprawdzić rozmiar pamięci pojedynczego elementu tablicy, możesz użyć itemsize.
x = np.array([1,2,3], dtype=np.complex128) x.itemsize
Wyjście:
16
Każdy element zajmuje 16 bajtów.
Indeksowanie i wycinanie Python
Podział danych jest prosty dzięki NumPy. Podzielimy macierz e, w Python, aby zwrócić wiersze lub kolumny, użyj nawiasów kwadratowych.
Przykład:
## Slice import numpy as np e = np.array([(1,2,3), (4,5,6)]) print(e) [[1 2 3] [4 5 6]]
Pamiętaj, że w NumPy pierwszy indeks tablicy zaczyna się od 0.
## First row print('First row:', e[0]) ## Second row print('Second row:', e[1])
Wyjście:
First row: [1 2 3] Second row: [4 5 6]
In Python, jak w wielu innych językach,
- Wartość przed przecinkiem oznacza wiersze.
- Wartość po przecinku oznacza kolumny.
- Jeśli chcesz wybrać kolumnę, dodaj
:przed indeksem kolumny. :oznacza, że chcesz pobrać wszystkie wiersze z wybranej kolumny.
print('Second column:', e[:,1])
Second column: [2 5]
Aby zwrócić dwie pierwsze wartości drugiego wiersza, użyj : aby zaznaczyć wszystkie kolumny do drugiego indeksu.
## Second Row, two values print(e[1, :2]) [4 5]
Funkcje statystyczne w Python
NumPy oferuje użyteczny zestaw funkcji statystycznych do znajdowania wartości minimalnej, maksymalnej, percentyla, odchylenia standardowego, wariancji i innych wartości z danej tablicy. Poniżej wymieniono najpopularniejsze z nich.
NumPy zawiera rozbudowane narzędzia pomocnicze do statystyk, podsumowane w tabeli.
| Funkcjonować | Odrętwiały |
|---|---|
| Min | np.min() |
| Max | np.max() |
| Oznaczać | np. średnia() |
| Mediana | np.mediana() |
| Odchylenie standardowe | np.std() |
Rozważmy następującą tablicę:
Przykład:
import numpy as np normal_array = np.random.normal(5, 0.5, 10) print(normal_array)
Wyjście:
[5.56171852 4.84233558 4.65392767 4.946659 4.85165567 5.61211317 4.46704244 5.22675736 4.49888936 4.68731125]
Przykład funkcji statystycznych NumPy
### Min print(np.min(normal_array)) ### Max print(np.max(normal_array)) ### Mean print(np.mean(normal_array)) ### Median print(np.median(normal_array)) ### Sd print(np.std(normal_array))
Wyjście:
4.467042435266913 5.612113171990201 4.934841002270593 4.846995625786663 0.3875019367395316
Co to jest iloczyn kropkowy?
numpy.dot to potężna funkcja do obliczeń macierzowych. Na przykład, możesz obliczyć iloczyn skalarny za pomocą np.dot. numpy.dot zwraca iloczyn skalarny a oraz bi obsługuje tablice 1D i 2D. W przypadku danych wejściowych 2D wykonuje mnożenie macierzy.
Składnia:
numpy.dot(x, y, out=None)
Parametry
Tutaj,
x, y: tablice wejściowe. x oraz y oba powinny być 1D lub 2D np.dot() działać jako iloczyn skalarny lub mnożenie macierzy.
na zewnątrz: opcjonalny argument wyjściowy używany do przechwycenia wyniku. W przeciwnym razie zwracana jest tablica ndarray.
Zwroty
Funkcja numpy.dot() zwraca iloczyn skalarny dwóch tablic x oraz yZwraca skalar, gdy oba są 1D, w przeciwnym razie zwraca tablicę. Jeśli out jest podana, to zwracana jest tablica.
Podnosi
Iloczyn skalarny w Python podnosi A ValueError jeśli ostatni wymiar x nie pasuje do drugiego od końca wymiaru y.
Przykład:
## Linear algebra ### Dot product: product of two arrays f = np.array([1,2]) g = np.array([4,5]) ### 1*4+2*5 np.dot(f, g)
Wyjście:
14
Mnożenie macierzy w Python
NumPy matmul() Funkcja zwraca iloczyn macierzowy dwóch tablic. Oto jak to działa.
1) W przypadku tablic 2D zwraca normalny iloczyn macierzy.
2) W przypadku wymiarów większych niż 2, iloczyn traktowany jest jako stos macierzy.
3) Najpierw tablicę 1D przekształca się w macierz, a następnie oblicza się iloczyn.
Infiks @ operator, dostępny od Python 3.5 jest skrótem od matmul i jest szeroko stosowany w nowoczesnym kodzie.
Składnia:
numpy.matmul(x, y, out=None)
Tutaj,
x, y:tablice wejściowe. Skalary nie są dozwolone.
na zewnątrz: Parametr opcjonalny. Zwykle dane wyjściowe są przechowywane w tablicy ndarray.
Przykład:
W ten sam sposób możesz obliczyć mnożenie macierzy za pomocą np.matmul.
### Matmul: matrix product of two arrays h = [[1,2],[3,4]] i = [[5,6],[7,8]] ### 1*5+2*7 = 19 np.matmul(h, i)
Wyjście:
array([[19, 22], [43, 50]])
wyznacznik
Jeśli musisz obliczyć wyznacznik macierzy, użyj np.linalg.det(). NumPy zajmie się wymiarami za Ciebie.
Przykład:
## Determinant 2*2 matrix ### 5*8-7*6 np.linalg.det(i)
Wyjście:
-2.000000000000005
Wyjaśnienie rozgłaszania NumPy
Rozgłaszanie to reguła, która pozwala NumPy wykonywać obliczenia arytmetyczne na tablicach o różnych kształtach bez kopiowania danych. Po dodaniu skalara do wektora jednowymiarowego lub wektora jednowymiarowego do macierzy dwuwymiarowej, NumPy rozciąga mniejszy operand wzdłuż brakujących osi, tak aby kształty się ze sobą pokrywały. Pozwala to uniknąć jawnego Python pętle i jest jednym z głównych powodów, dla których kod NumPy sprawia wrażenie szybkiego i zwięzłego.
Dwa kształty są zgodne do transmisji, gdy porównując je od prawej do lewej, każda para wymiarów jest równa lub jeden z nich jest równy 1. Na przykład macierz kształtów (3, 4) transmisje przeciwko rzędowi kształtów (4,) lub kolumna kształtu (3, 1)Ta sama logika napędza normalizację w uczeniu maszynowym, gdzie subskrybujesztracwektor średniej dla każdej cechy z partii próbek w jednym wierszu. Model nadawania jest również modelem koncepcyjnym używanym przez biblioteki tensorowe, takie jak Py.Torch, TensorFlow i JAX, dzięki czemu zasady, których się tutaj uczysz, można przenieść bezpośrednio do kodu GPU.
Jak NumPy wspomaga sztuczną inteligencję i uczenie maszynowe
NumPy jest obecny w niemal każdym nowoczesnym systemie Python Stos AI. PyTorTensory ch, tensory chętne TensorFlow i tablice JAX udostępniają te same funkcje nadawania, krojenia i ponownego kształtowaniaping API, którego nauczyłeś się na tablicach nDarray NumPy. Wiele samouczków nadal wprowadza wstępnie przetworzone tablice NumPy do pętli treningowych modelu, a frameworki akceptują je bez konwersji.
Trzy konkretne wzorce pokazują, jak NumPy łączy się z dzisiejszymi systemami sztucznej inteligencji. Po pierwsze, inżynierowie danych przekształcają surowe funkcje w tablice NumPy, a następnie przekazują je do potoków scikit-learn lub zestawów danych Hugging Face. Po drugie, badacze używają NumPy jako bazy dla procesorów, a następnie zastępują je CuPy, które zapewnia niemal identyczne API, ale działa na procesorach graficznych NVIDIA z wykorzystaniem CUDA. Po trzecie, JAX bazuje na API NumPy, dodając automatyczne różnicowanie i kompilację just-in-time, dzięki czemu ten sam kod, który działa na laptopie, może działać na procesorach TPU w chmurze. Wnioskiem jest to, że umiejętności związane z tablicami, które zdobędziesz dzięki NumPy, wnoszą do każdego głównego zestawu narzędzi do głębokiego uczenia się, co czyni ten samouczek przydatnym krokiem na drodze do rozwoju sztucznej inteligencji.
