Matricos daugybos operatoriaus „@“ įvedimas Python 3.5+ versijoje turi keletą pranašumų, palyginti su funkcijos „np.dot()“ naudojimu:
1. Įskaitomumas ir aiškumas: operatorius „@“ daro kodą skaitomesnį ir intuityvesnį, nes jis tiesiogiai parodo matematinę matricos daugybos operaciją. Tai gali pagerinti bendrą kodo kokybę ir padaryti jį lengviau suprantamą kitiems kūrėjams.
2. Suderinamumas su matematiniu žymėjimu: operatorius „@“ suderinamas su standartine matematine matricos daugybos žyma, kuri gali padėti užpildyti atotrūkį tarp matematinių sąvokų ir jų įgyvendinimo kode.
3. Sumažintas daugiažodiškumas: operatoriaus „@“ naudojimas yra glaustesnis nei funkcijos „np.dot()“ iškvietimas, todėl kodas gali būti kompaktiškesnis ir išraiškingesnis.
4. Patobulintas klaidų tvarkymas: operatorius „@“ užtikrina geresnį klaidų apdorojimą, palyginti su „np.dot()“. Jei matricos matmenys nesuderinami dauginant, operatorius „@“ iškels „ValueError“, o „np.dot()“ gali tyliai pateikti neteisingus rezultatus.
5. Galimi našumo patobulinimai: kai kuriais atvejais operatorius „@“ gali būti šiek tiek efektyvesnis nei „np.dot()“ dėl būdo, kaip jis įdiegtas „Python“ interpretatoriuje. Tačiau našumo skirtumas paprastai yra nereikšmingas, todėl pasirinkimas tarp šių dviejų turėtų būti labiau pagrįstas skaitomumu ir nuoseklumu.
6. Kitų programavimo kalbų naudotojų pažinimas: matricos daugybos operatorius „@“ yra įprastas kitų programavimo kalbų, pvz., MATLAB ir R, bruožas. Naudojant tą patį žymėjimą „Python“, kūrėjams gali būti lengviau pereiti susipažinęs su šiomis kalbomis.
Nors „np.dot()“ vis dar yra tinkama ir naudinga funkcija, ypač atgalinio suderinamumo ar specifinių naudojimo atvejų atveju, operatorius „@“ suteikia intuityvesnį ir glaustesnį būdą atlikti matricos dauginimą Python 3.5 ir vėlesnėse versijose. Pasirinkimas tarp dviejų galiausiai priklauso nuo konkrečių projekto reikalavimų ir asmeninių kūrėjo pageidavimų.
Citatos:
[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/
kaip @ operatorius tvarko transliavimą kitaip nei np.dot
„@“ operatorius Python 3.5+ versijoje apdoroja transliavimą kitaip nei „np.dot()“ šiais būdais:
1. Transliavimas: operatorius „@“ transliuoja kitaip nei „np.dot()“. „@“ operatorius vadovaujasi matricos daugybos taisyklėmis, kur kiekvieną paskutinių dviejų indeksų matricų krūvą laiko atskiromis matricomis ir atitinkamai transliuoja. Tai reiškia, kad jei kuris nors argumentas yra N-D, N > 2, jis traktuojamas kaip matricų, esančių paskutiniuose dviejuose indeksuose, krūva ir atitinkamai transliuojama[4].
2. Išvesties forma: operatorius „@“ grąžina 3D masyvą, jei įvesties masyvai yra 3D, o „np.dot()“ tokiais atvejais pateikia 4D masyvą. Taip yra todėl, kad „@“ operatorius sukurtas atlikti matricos dauginimą, dėl kurio paprastai susidaro 3D masyvas. Kita vertus, „np.dot()“ yra lankstesnis ir gali apdoroti įvairias formas, priklausomai nuo įvesties masyvų[1].
3. Axis Alignment: operatorius „@“ sulygiuoja įvesties masyvų ašis kitaip nei „np.dot()“. Operatorius „@“ sulygiuoja paskutinę pirmojo masyvo ašį su antrąja antrojo masyvo ašimi, o „np.dot()“ sulygiuoja paskutinę pirmojo masyvo ašį su antrojo masyvo ašimi nuo antros iki paskutinės [4].
4. Našumas: „@“ operatorius paprastai yra greitesnis nei „np.dot()“ matricos dauginimui dėl optimizuoto įdiegimo Python 3.5+. Tačiau šis skirtumas paprastai yra nereikšmingas, nebent dirbama su labai dideliais duomenų rinkiniais[1].
Apibendrinant galima pasakyti, kad operatorius „@“ transliavimą tvarko kitaip nei „np.dot()“, laikydamasis matricos daugybos taisyklių ir kiekvieną paskutinių dviejų indeksų matricų krūvą laikydamas atskiromis matricomis. Dėl to susidaro skirtingos išvesties masyvų formos ir ašių išlygiavimas.
Citatos:[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/