Ce definește dimensionalitatea unei matrice? (Inginerie software, Teorie, Matrice, Teoria Informației)

Noua Alexandria a intrebat.

Știu că atunci când vorbim despre un array care are 1, 2 sau 4 dimensiuni, ne referim la array-uri de genul acesta:

1: [0]
2: [0,0]
3: [0,0,0]
4: [0,0,0,0]
...

Este prima „axă” a unui array singurul lucru care definește dimensionalitatea acestuia? Un array cu 4 dimensiuni poate fi reprezentat în aceste moduri?

[0, [0,0,0]]
[[0,0], [0,0]]

sau acest lucru intră sub incidența unei alte definiții a dimensionalității?

O altă opțiune este că un array cu 4 dimensiuni ar fi de forma

[ [[ [0,..],[0,..] ], [ [0,..],[0,..] ]], [[ [0,..],[0,..] ], [ [0,..],[0,..] ]], [[ [0,..],[0,..] ], [ [0,..],[0,..] ]], [[ [0,..],[0,..] ], [ [0,..],[0,..] ]] ]

de exemplu

[ 
  [
    [ [0,..],[0,..] ], 
    [ [0,..],[0,..] ]
  ], 
  [
    [ [0,..],[0,..] ], 
    [ [0,..],[0,..] ]
  ], 
  [
    [ [0,..],[0,..] ], 
    [ [0,..],[0,..] ]
  ], 
  [
    [ [0,..],[0,..] ], 
    [ [0,..],[0,..] ]
  ]
]

Este doar o nuanță de nomenclatură pe care o aduc în discuție? Este această definiție relativă la domeniul în care discutăm (calcul vs. sisteme fizice)?


(gândurile au pornit de la această întrebare).

Comentarii

  • Cred că al doilea exemplu pe care îl dați (cum ar fi [0, [0,0,0]] și [[0,0], [0,0]]) arată ca matrici zimțate – practic, o matrice de matrice de orice dimensiune (msdn.microsoft.com/en-us/library/2s05feca.aspx) –  > Por FrustratedWithFormsDesigner.
  • Dacă aveți acces la MATLAB sau Octave, conceptul de „dimensiune singleton” ar fi extrem de util pentru a ajuta pe oricine să se gândească la această problemă. A se vedea: mathworks.com/help/matlab/ref/squeeze.html –  > Por rwong.
  • Ați putea să specificați notația pe care o utilizați? Mi se pare că primul dvs. exemplu este o matrice 1D normală, dar pe baza textului, nu este așa. –  > Por Mikayla Maki.
5 răspunsuri
Ross Patterson

Dimensionalitatea provine din … dimensiuni!

A matrice unidimensională este ca unul dintre acele recipiente cu pastile zilnice:

Este un vector, cu un singur index, și puteți selecta un anumit element la un moment dat, specificând unde se află de-a lungul liniei.

A matrice bidimensională este ca o tablă de șah:

Este o matrice, cu doi indici, și puteți selecta câte un element specific la un moment dat, specificând unde se intersectează cele două linii. În notația de șah, „a1” este celula din stânga jos a imaginii, „h8” cea din dreapta sus, în majoritatea limbajelor ar fi [0,0] și [7,7] sau [0][0] și [7][7].

A matrice tridimensională este ca un cub Rubik (cu excepția faptului că puteți accesa mai mult decât elementele de la suprafață):

Este un cub, cu trei indici, și puteți selecta un anumit element la un moment dat, specificând unde se intersectează cele trei linii.

A matrice cvadridimensională este ca… ei bine… nimic real. Dar matematicienii au modelat structuri cu dimensiuni mai mari de mult timp, iar unele au chiar și nume. Va trebui doar să vă extindeți mintea pentru a le înțelege. Dar echivalentul computerizat este o extensie și mai naturală,

Comentarii

  • O matrice cu 4 dimensiuni poate fi considerată ca un rând de cuburi și așa mai departe. –  > Por Kyranstar.
Kilian Foth
1: [0]
2: [0,0]
3: [0,0,0]
4: [0,0,0,0]
...

Cred că ați înțeles greșit. Dacă vreți să spuneți că acestea sunt rețele unidimensionale/cu două/trei/patru-dimensionale, nu este cazul: toate sunt unidimensionale, doar că au diferite lungimi diferite..

Dar lungimea nu înseamnă dimensionalitate. După cum a explicat whatsisname, dimensionalitatea unei întregi matrice este numărul de subscripte pe care trebuie să le dați pentru a vă adresa unui singur element. Lungimea este doar numărul de valori diferite pe care le puteți da în mod legal pentru un anumit subscript în expresia respectivă (dacă lungimea este 4, valorile valide sunt 0,1,2,3).

Comentarii

  • Bine, dar eu dau și exemple de matrici imbricate – sau cel puțin așa credeam eu. Această anvelopare ar putea fi descrisă prin subscripte? Este vorba doar de notație, unde am folosit o notație „ciudată”, deoarece încercam să întreb dacă cuibăritul [arborescent] este același lucru cu dimensionalitatea? –  > Por New Alexandria.
  • Am făcut +1, dar apoi m-am răzgândit, deoarece cred că acest lucru se încadrează în notarea folosită… [0, 0] arată ca o matrice unidimensională cu 2 elemente, dar matematic ar putea fi indicii unei matrice bidimensionale –  > Por HorusKol.
whatsisname

Dimensionalitatea reprezintă numărul de subscripții pe care le poți folosi pentru a selecta elementele.

Exemplul dvs. [0, [0,0,0]] este tot o matrice 2d, deși conține o matrice 3d ca al doilea element. Asta nu îl face un array 4d sau 5d, ci doar o structură de date imbricate unde conceptul de „dimensionalitate” se strică și devine foarte repede confuz.

Exemple ca [[0,0], [0,0]] și [0, [0,0,0]] sunt mai bine gândite nu ca array-uri, ci ca arbori sau alte structuri de date ierarhice.

Michael Durrant

Da, exemplele date sunt toate unidimensionale, așa cum afirmă Kilan, deși ar putea depinde și de ceea ce folosiți exact, de exemplu, de limbajele de calculator care au un format diferit pentru a reprezenta astfel de construcții.

Dimensionalitatea în sine poate fi considerată, de asemenea, ca fiind „cuibărită”, de exemplu, dacă există un set de elemente discrete, care este 1 dimensiune, dacă fiecare element are, de asemenea, elemente, atunci este 2 dimensional, dacă fiecare dintre acestea este, de asemenea, compus din elemente, este 3 dimensional, etc.

În ruby (de exemplu) acest lucru este reprezentat de:

[n] # One Dimension
[n][o] # Two Dimensions
[n][o][p] # Three Dimensions
[n][o][p][q] # Four Dimensions

Pentru fiecare caz n, o, p și q sunt numărul de elemente de la nivelul respectiv.

Astfel, de exemplu, dacă doriți să reprezentați 6 state americane, primele 4 orașe din fiecare și cele mai înalte 5 clădiri din fiecare oraș, ați putea folosi [5][3][4] (presupunând că se utilizează array-uri bazate pe zero).

Am lucrat și cu limbaje în care o matrice tridimensională, cum ar fi cea de mai sus, ar fi reprezentată prin

(5,3,4)

Comentarii

  • Nu înțeleg de ce array-urile imbricate(?) pe care le-am enumerat în întrebarea mea sunt diferite de următoarele la care ați răspuns. Singura diferență, pentru mine, pare a fi notarea. Da? –  > Por New Alexandria.
InformedA

O matrice n-dimensională este o colecție de date. aceste date pot fi accesate printr-o valoare.

Oamenii asociază adesea această valoare cu o coordonată într-un spațiu n-dimensional, astfel încât această valoare ar avea n componente, de exemplu (x,y,z) pentru un array 3-d. Cu alte cuvinte, numărul de dimensiuni într-un array este numărul de componente ale valorii pe care o utilizați pentru a accesa datele din array.

Acum urmează un lucru pe care câteva persoane l-au menționat deja în răspunsul lor, și anume că array-ul nu este același lucru cu ierarhia arborescentă. Acest lucru se datorează faptului că noi toți putem simți că există o diferență între un arbore și un cub, în afară de notație, dar mulți nu pot spune care este această diferență. La urma urmei, datele dintr-un arbore și datele dintr-o matrice de n dimensiuni pot fi identificate printr-un vector ca valoare.

Sunt surprins că nimeni nu a observat încă această diferență. Este simplă și trivială. Diferența constă în modul în care acestea cresc. Arborele crește în adâncime, ceea ce înseamnă că factorul de ramificare rămâne același. Pe de altă parte, cubul (matrice) crește în lungime, ceea ce înseamnă că adâncimea lor rămâne aceeași (același număr de dimensiuni), dar factorul de ramificare se schimbă dacă le privim din perspectiva unui arbore. Rezultă că unul dintre ele are o creștere exp și o compresie minimă, în timp ce în cazul celuilalt se întâmplă contrariul. Din punctul de vedere al programelor informatice, puteți vedea diferența în modul în care declarați o variabilă.