Ca cineva cu pregătire în informatică, am fost foarte confuz prima dată când am întâlnit oameni din matematică care insistau că un tensor nu este o matrice. Pentru că ambele sunt clar matrice multidimensionale. Dar apoi mi-am dat seama... Matematicienii folosesc întotdeauna limbaje puternic tipărite în mintea lor!
Pentru un informatician, structura, funcțiile, interfața și constrângerile sunt atât clar separate, cât și interconvertibile. Un tensor este o matrice pe care o tratezi ca pe un tensor. Poți face să le amesteci, o clasă este un pachet din toate cele patru, dar nu este obligatoriu.
Când îți spun că vectorii nu sunt liste de numere, este pentru că s-au antrenat să fie verificatori de tipuri pentru evaluarea entuziastă a limbajelor logice puternic tipizate. Matematicienii rulează ceva ce este practic un verificator magic de tipuri învățat în mintea lor.
Cei din informatică folosesc în principal Lisp și/sau C mental, în funcție dacă vrem să fie interpretul sau calculatorul. Dacă rulăm un simulator mental puternic tipizat, acesta este pus deasupra. Chiar și Haskell separă declarațiile de tip de implementare.
Dar matematica se face doar cu semnături de tip! Fac totul cu macro-uri puternic tipizate! Este ca cazul limită al tipurilor Hindley–Milner, dacă s-ar face o expansiune speculativă pentru a găsi compresii mai bune. Ceea ce le permite matematicienilor să facă compilații optimizate ale programelor, abstract.
Acum că fac mai multe calcule reale, văd puterea acestei abordări. Dar cred că puterea abordării informaticii este subapreciată de cei din domeniul matematicii. Pentru că înțelepciunea CS este că un tensor este o matrice, dar o matrice nu este un tensor. Variabilele sunt ceea ce poți folosi pentru a le arunca.
Matematicienii știu despre caste, dar le numesc nume amuzante precum "morfisme". Și vor admite, sub presiune, că dacă ai distribuția potrivită poți folosi un vector ca rotație de dimensiune corespunzătoare.
Dar ei vor spune: nu folosești vectorul ca rotație, ai derivat un bivector sub bla bla bla. Acest lucru este adevărat, dacă ești un verificator de tip Prolog Super HM. Nu este adevărat dacă ești un compilator, un interpeter sau un calculator.
Oricum, încă mă cert cu oamenii de la matematică din cauza asta pentru că e atât de ridicol să negi că duck-typing-ul funcționează, dar au dreptate, tot necesită unificarea tipurilor.
@St_Rev Și nu, un tensor este un subtip al unei matrice, nu invers. Matricea este obiectul mai general, tensorii trebuie să respecte mai multe constrângeri.
@SokobanHero Deci, din moment ce o aplicație multiliniară poate fi întotdeauna realizată ca o matrice (ok, tehnic vorbind, o hipermatrice, pentru că oamenii aparent folosesc matricea ca să însemne doar un rang 2 n-dim array) și invers într-un anumit spațiu, cred că este la fel de rezonabil să mergem în ambele direcții.
55,18K