Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon kakšne so prednosti uporabe @ za množenje matrik v Python 3.5+


kakšne so prednosti uporabe @ za množenje matrik v Python 3.5+


Uvedba operatorja `@` za množenje matrik v Python 3.5+ ima več prednosti pred uporabo funkcije `np.dot()`:

1. Berljivost in jasnost: Operator `@` naredi kodo bolj berljivo in intuitivno, saj neposredno predstavlja matematično operacijo množenja matrike. To lahko izboljša splošno kakovost kode in olajša razumevanje drugim razvijalcem.

2. Skladnost z matematično notacijo: Operator `@` je usklajen s standardno matematično notacijo za matrično množenje, kar lahko pomaga premostiti vrzel med matematičnimi koncepti in njihovo implementacijo v kodo.

3. Zmanjšana podrobnost: uporaba operatorja `@` je bolj jedrnata kot klicanje funkcije `np.dot()`, kar lahko vodi do bolj strnjene in izrazite kode.

4. Izboljšano obravnavanje napak: Operator `@` zagotavlja boljše obravnavanje napak v primerjavi z `np.dot()`. Če so dimenzije matrike nezdružljive za množenje, bo operater `@` sprožil `ValueError`, medtem ko `np.dot()` lahko tiho ustvari nepravilne rezultate.

5. Potencialne izboljšave zmogljivosti: V nekaterih primerih je lahko operator `@` nekoliko bolj učinkovit kot `np.dot()` zaradi načina, na katerega je implementiran v tolmaču Python. Vendar je razlika v zmogljivosti na splošno zanemarljiva in izbira med obema bi morala temeljiti bolj na berljivosti in doslednosti.

6. Poznavanje za uporabnike drugih programskih jezikov: Operator `@` za matrično množenje je običajna značilnost v drugih programskih jezikih, kot sta MATLAB in R. Uporaba istega zapisa v Pythonu lahko razvijalcem olajša prehod poznajo te jezike.

Medtem ko je `np.dot()` še vedno veljavna in uporabna funkcija, zlasti za združljivost s prejšnjimi različicami ali posebne primere uporabe, operater `@` zagotavlja bolj intuitiven in jedrnat način za izvajanje množenja matrik v Pythonu 3.5 in novejših različicah. Izbira med obema je na koncu odvisna od posebnih zahtev projekta in osebnih preferenc razvijalca.

Citati:
[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/

kako operater @ obravnava oddajanje drugače kot np.dot

Operator `@` v Pythonu 3.5+ obravnava oddajanje drugače kot `np.dot()` na naslednje načine:

1. Oddajanje: Operater `@` izvaja oddajanje drugače kot `np.dot()`. Operator `@` sledi pravilom množenja matrik, kjer obravnava vsak kup matrik v zadnjih dveh indeksih kot ločeni matriki in ustrezno oddaja. To pomeni, da če je katerikoli argument N-D, N > 2, se obravnava kot kup matrik, ki se nahajajo v zadnjih dveh indeksih, in se ustrezno oddaja [4].

2. Oblika izhoda: Operator `@` vrne 3D matriko, če so vhodne matrike 3D, medtem ko `np.dot()` v takih primerih vrne 4D matriko. To je zato, ker je operator `@` zasnovan za izvajanje množenja matrik, kar običajno povzroči 3D matriko. `np.dot()` je po drugi strani bolj prilagodljiv in lahko obravnava različne oblike, odvisno od vhodnih nizov [1].

3. Poravnava osi: Operator `@` poravna osi vhodnih nizov drugače kot `np.dot()`. Operator `@` poravna zadnjo os prvega polja z drugo osjo drugega polja, medtem ko `np.dot()` poravna zadnjo os prvega polja s predzadnjo osjo drugega polja. [4].

4. Zmogljivost: Operator `@` je na splošno hitrejši od `np.dot()` za množenje matrik zaradi optimizirane implementacije v Python 3.5+. Vendar je ta razlika običajno zanemarljiva, razen če delate z zelo velikimi zbirkami podatkov [1].

Če povzamemo, operater `@` obravnava oddajanje drugače kot `np.dot()` tako, da sledi pravilom množenja matrik in obravnava vsak kup matrik v zadnjih dveh indeksih kot ločeni matriki. Posledica tega so različne oblike in poravnave osi za izhodna polja.

Citati:
[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/