Zavedení operátoru `@` pro násobení matic v Pythonu 3.5+ má několik výhod oproti použití funkce `np.dot()`:
1. Čitelnost a srozumitelnost: Operátor `@` činí kód čitelnějším a intuitivnějším, protože přímo reprezentuje matematickou operaci násobení matic. To může zlepšit celkovou kvalitu kódu a usnadnit pochopení pro ostatní vývojáře.
2. Konzistence s matematickou notací: Operátor `@` se zarovnává se standardní matematickou notací pro maticové násobení, což může pomoci překlenout propast mezi matematickými pojmy a jejich implementací v kódu.
3. Snížená výřečnost: Použití operátoru `@` je stručnější než volání funkce `np.dot()`, což může vést ke kompaktnějšímu a výraznějšímu kódu.
4. Vylepšené zpracování chyb: Operátor `@` poskytuje lepší zpracování chyb ve srovnání s `np.dot()`. Pokud jsou rozměry matice pro násobení nekompatibilní, operátor `@` vyvolá `Chyba hodnoty`, zatímco `np.dot()` může tiše poskytnout nesprávné výsledky.
5. Potenciální vylepšení výkonu: V některých případech může být operátor `@` o něco efektivnější než `np.dot()` kvůli způsobu, jakým je implementován v interpretu Pythonu. Rozdíl ve výkonu je však obecně zanedbatelný a volba mezi nimi by měla být založena spíše na čitelnosti a konzistenci.
6. Znalost pro uživatele jiných programovacích jazyků: Operátor `@` pro násobení matic je běžnou funkcí v jiných programovacích jazycích, jako je MATLAB a R. Použití stejného zápisu v Pythonu může vývojářům usnadnit přechod obeznámeni s těmito jazyky.
Zatímco `np.dot()` je stále platná a užitečná funkce, zejména pro zpětnou kompatibilitu nebo specifické případy použití, operátor `@` poskytuje intuitivnější a výstižnější způsob, jak provádět násobení matic v Pythonu 3.5 a novějších verzích. Volba mezi těmito dvěma nakonec závisí na konkrétních požadavcích projektu a osobních preferencích developera.
Citace:
[1] https://stackoverflow.com/questions/34142485/difference-between-numpy-dot-and-python-3-5-matrix-multiplication
[2] https://labex.io/tutorials/python-numpy-dot-function-86429
[3] https://madewithml.com/courses/foundations/numpy/
[4] https://www.researchgate.net/figure/The-advantages-of-matrix-multiplication-in-GPU-versus-CPU-25_fig3_320674344
[5] https://www.geeksforgeeks.org/applications-advantages-and-disadvantages-of-matrix-data-structure/
jak operátor @ zpracovává vysílání jinak než np.dot
Operátor `@` v Pythonu 3.5+ zpracovává vysílání odlišně od `np.dot()` následujícími způsoby:
1. Vysílání: Operátor `@` provádí vysílání jinak než `np.dot()`. Operátor `@` se řídí pravidly násobení matic, kde s každým zásobníkem matic v posledních dvou indexech zachází jako se samostatnými maticemi a podle toho vysílá. To znamená, že pokud je některý z argumentů N-D, N > 2, zachází se s ním jako s hromadou matic umístěných v posledních dvou indexech a podle toho se vysílá[4].
2. Tvar výstupu: Operátor `@` vrací 3D pole, pokud jsou vstupní pole 3D, zatímco `np.dot()` v takových případech vrací 4D pole. Je to proto, že operátor `@` je navržen k provádění násobení matic, což obvykle vede k 3D poli. `np.dot()` je na druhou stranu flexibilnější a dokáže zpracovat různé tvary v závislosti na vstupních polích[1].
3. Axis Alignment: Operátor `@` zarovná osy vstupních polí jinak než `np.dot()`. Operátor `@` zarovná poslední osu prvního pole s druhou osou druhého pole, zatímco `np.dot()` zarovná poslední osu prvního pole s předposlední osou druhého pole [4].
4. Výkon: Operátor `@` je obecně rychlejší než `np.dot()` pro násobení matic díky optimalizované implementaci v Pythonu 3.5+. Tento rozdíl je však obvykle zanedbatelný, pokud nepracujete s velmi velkými datovými soubory[1].
Stručně řečeno, operátor `@` zpracovává vysílání jinak než `np.dot()` tím, že se řídí pravidly násobení matic a s každým zásobníkem matic v posledních dvou indexech zachází jako se samostatnými maticemi. Výsledkem jsou různé tvary a zarovnání os pro výstupní pole.
Citace:[1] https://stackoverflow.com/questions/34142485/difference-between-numpy-dot-and-python-3-5-matrix-multiplication
[2] https://www.digitalocean.com/community/tutorials/numpy-matrix-multiplication
[3] https://labex.io/tutorials/python-numpy-dot-function-86429
[4] https://mkang32.github.io/python/2020/08/30/numpy-matmul.html
[5] https://madewithml.com/courses/foundations/numpy/