Abstrait:
Donc, si je comprends bien (bien que ma compréhension soit très limitée), il y a trois dimensions avec lesquelles nous travaillons (généralement) physiquement:
Le 1er serait représenté par une ligne.
Le 2e serait représenté par un carré.
Le 3ème serait représenté par un cube.
Assez simple jusqu'à ce que nous arrivions au 4ème - C'est un peu difficile de dessiner dans un espace 3D, si vous voyez ce que je veux dire ... Certaines personnes disent que cela a quelque chose à voir avec le temps .
La question:
Maintenant, même si cela n'a pas beaucoup de sens, c'est très bien avec moi. Ma question n'est pas à ce sujet, ou je la poserais sur MathSO ou PhysicsSO. Ma question est: comment l'ordinateur gère-t-il cela avec des tableaux?
Je sais que vous pouvez créer des tableaux 4D, 5D, 6D, etc ... dans de nombreux langages de programmation différents, mais je veux savoir comment cela fonctionne.
Réponses:
Heureusement, les programmes ne sont pas limités par les contraintes physiques du monde réel. Les tableaux ne sont pas stockés dans l'espace physique, donc le nombre de dimensions du tableau n'a pas d'importance. Ils sont aplatis en mémoire linéaire. Par exemple, un tableau unidimensionnel avec deux éléments peut être présenté comme suit:
Un tableau dimensionnel 2x2 pourrait alors être:
Un tableau tridimensionnel 2x2x2 peut être:
Vous pouvez, espérons-le, voir où cela va. Quatre dimensions peuvent être:
la source
int a[2][2][2];
serait un tableau tridimensionnel.Vous n'avez pas besoin d'imaginer dans des dimensions spatiales élevées, pensez simplement à une feuille de fougère.
La tige principale est votre premier tableau, chaque branche étant un élément qu'elle stocke. Si nous regardons une branche, c'est votre deuxième dimension. Il a une structure similaire de branches plus petites venant de lui représentant ses données. Ceux-ci ont à leur tour leurs propres petites branches qui continuent jusqu'à ce que nous arrivions aux minuscules feuilles représentant les données du tableau de dimension intérieure la plus haute ou la plus haute.
Vous pouvez voir cette construction s'accumuler si vous déclarez chaque niveau avec son propre nom. Ici, je réutilise chaque niveau variable pour minimiser le code:
la source
Les dimensions sont ce que vous voulez être, la 4ème dimension ne doit pas nécessairement être le temps. Si vous pensez à trois dimensions comme un cube, vous pouvez penser à 4 dimensions comme une rangée de cubes. 5 dimensions, une grille de cubes, etc.
Vous pouvez également avoir une collection 3D de voxels, avec une 4ème dimension étant la couleur ou la densité ou une autre propriété.
Lorsque vous allouez la mémoire pour votre tableau multidimensionnel, il alloue simplement le produit de chaque dimension maximum pour votre type de données. Si vous avez un tableau 3D ou un «cube» de 10 éléments dans chaque dimension, vous aurez 1 000 éléments alloués. Si vous en faites un tableau 4d avec 10 éléments dans la 4e dimension, l'ordinateur allouera simplement 10 000. Augmentez-le jusqu'à 5 dimensions et il en allouera 100 000.
L'ordinateur ne se soucie d'aucune sorte de signification sur ce que représente chaque dimension. Pour sélectionner où se trouve un seul point dans la liste des éléments, il suffit de multiplier pour sélectionner une adresse mémoire.
la source
Imaginez faire de la R&D sur un nouveau dispositif médical, une série de capteurs que vous placez le long des bras d'un patient. Vous avez sept volontaires alignés pour le test. Chaque capteur signale des mesures basse fréquence, moyenne fréquence et haute fréquence, que vous prenez toutes les 100 ms pendant environ une minute.
Comment stocker toutes ces données en mémoire pour l'analyse et le traçage?
Un tableau, évidemment. Cela ressemblerait à ceci (en utilisant un pseudocode générique composé):
C'est un tableau à cinq dimensions, et il n'y a rien de délicat, mystérieux ou déroutant à ce sujet. Il n'y a aucune raison d'essayer de l'associer à l'espace euclidien à 5 dimensions. Pour obtenir une valeur de données, nous utilisons une expression comme
Cela revient à interroger une base de données relationnelle où vous avez un enregistrement pour chaque valeur de données, avec cinq colonnes contenant l'ID du patient, l'ID du capteur, etc., et une colonne avec la valeur. Pour obtenir un point de données, utilisez cinq termes dans WHERE: SELECT value FROM SensorData WHERE (patientid = 6) and (sensorid = 5) and (arm = "left") and (channel = "midfreq") and (sampleindex = 338 ).
Il n'y a rien de mystique dans une table de base de données avec cinq colonnes ou plus, n'est-ce pas?
(J'utilise l'indexation basée sur 1, mais dans la vie réelle, la base 0 est beaucoup plus courante.)
Notez que je suis un mauvais garçon en raison du codage en dur du nombre d'armes. Si je reçois un financement pour enquêter sur ces capteurs sur une pieuvre, je suis en difficulté!
la source
Un tableau n'est qu'un bloc de mémoire continue. L'adressage de la mémoire est unidimensionnel, vous pouvez avancer ou reculer. Donc, en supposant que vous ayez un tableau à 5 éléments, 5 blocs de mémoire seront réservés. Si vous avez un tableau à 2 dimensions avec 5 éléments dans chaque dimension, 25 blocs de mémoire seront réservés.
la source
Eh bien, en fait, les mathématiciens n'associeraient jamais (ou du moins pas habituellement) une quatrième dimension à quelque chose comme le temps. Ils n'associeraient pas non plus les trois premiers à quelque chose comme: les mathématiciens définissent simplement la dimension comme une propriété abstraite, typiquement, d'un espace vectoriel (souvent cela sera généralisé aux variétés ou même aux espaces métriques ). Et cette définition abstraite ne se soucie pas du nombre de dimensions de l'espace physique dans lequel nous nous déplaçons. Le concept de dimensions s'applique aux espaces qui ne ressemblent même pas à l'espace physique. En fait, les mathématiciens (et même les physiciens) utilisent très souvent des dimensions infinies des espaces, tels que les espaces de Hilbert de la mécanique quantique.
Cela étant clarifié, parlons de tableaux - vous n'avez pas besoin de comprendre les espaces vectoriels, car la définition abstraite est en fait beaucoup plus simple ici.
Un tableau de taille ( ℓ 0 × ℓ 1 × ℓ 2 × ... × ℓ n −1 ) (c'est-à-dire de dimension n ) est simplement un ensemble de nombres ℓ 0 ⋅ ℓ 1 ⋅ ... ⋅ ℓ n −1 ( ou n'importe quel type d'objet remplit le tableau). La seule différence avec un tableau unidimensionnel de cette longueur est que vous avez un moyen particulièrement utile d'indexer les dimensions séparément, à savoir
i lin = i n −1 + ℓ n −1 ⋅ ( i n −2 + ℓ n −1 ⋅ (... ℓ 2 ⋅ ( i 1 + ℓ 1 ⋅ i 0 ) ...))
la source
imshow
en Python) - elle peut montrer deux dimensions spatiales ainsi qu'une troisième dimension de couleur.En programmation, les tableaux sont assez faciles à implémenter, mais peut-être pas à comprendre.
Généralement, chaque niveau de tableaux signifie que le contenu est
n
plié. Cela signifieint x[4]
sont 4 blocs, chacun contenant unint
.int x[5][4]
sont 5 blocs, chacun contenant unint[4]
.int x[3][5][4]
sont 3 blocs, chacun d'eux contenant unint[5][4]
.int x[2][3][5][4]
sont 2 blocs, chacun contenant unint[3][5][4]
.La façon dont vous vous référez à eux dépend de vous, mais pour une meilleure compréhension, vous avez quelque chose comme
COLUMN
pour le dernierROW
pour l'avant-dernierPAGE
pour l'avant-dernierJusqu'ici, je l'ai lu quelque part. Pour rester ici, on peut aussi bien définir
BOOK
pour l'avant-dernierSHELF
pour l'avant-dernier. (Ou, si vous préférez,SHELFROW
afin que nous puissions continuer.)Cela dit, je n'ai jamais vu de tableau avec plus de 4 ou peut-être 5 dimensions dans la "vie sauvage".
De cette façon, vous pouvez définir et imaginer
int x[6][2][3][5][4]
comme une collection de 6 "étagères", chacune ayant 2 livres, chacune ayant 3 pages, chacune ayant 5 lignes, chacune ayant 4 colonnes.la source
Imaginez un tableau unidimensionnel comme une commode:
Chaque tiroir est un index du tableau. Vous pouvez mettre ce que vous voulez dans chaque tiroir, et à de nombreuses fins, chaque tiroir ne contiendra qu'un seul élément (c'est un tableau unidimensionnel).
Cette commode est magique, elle n'est donc pas limitée par l'espace physique. Cela signifie que vous pouvez placer une autre commode à l'intérieur de chaque tiroir de la première commode. Les coffres intérieurs des tiroirs peuvent alors contenir tout ce que vous voulez. C'est un tableau à deux dimensions.
Vous pouvez donc dire quelque chose comme "ouvrez le tiroir supérieur de la première commode, sortez la commode de ce tiroir, puis ouvrez le tiroir inférieur de cette deuxième commode". Ce serait comme accéder à un index d'un tableau 2D: myArray [0] [3];
Et bien sûr, les commodes à l'intérieur de la commode la plus extérieure peuvent elles-mêmes contenir des commodes. C'est un tableau en trois dimensions.
Donc, votre question est: qu'est-ce qu'un tableau à quatre dimensions? C'est une commode à tiroirs de commodes à tiroirs de commodes à tiroirs de commodes, bien sûr!
Ce sont des tiroirs tout en bas.
la source
myArray[0][3]
cela, ce serait le casmyArray[0][2]
. Mais sinon bonne explication.La plupart des aspects de cette question ont déjà été examinés, mais je pense que cela vous aidera si vous considérez la nature d'une dimension. Toutes les dimensions ne sont pas spatiales. Une dimension est un contexte de mesure. Voici quelques exemples:
La "quatrième" dimension n'est que quatrième car il existe trois dimensions spatiales. L'espace et le temps occupent une place importante, car ils occupent une place importante. Très en face. Mais toute qualité quantifiable et mesurable peut être une dimension si vous la mesurez.
Par exemple, les soutiens-gorge ont trois dimensions: la taille de la tasse, la taille de la poitrine et l'interstitiel (je ne sais pas comment vous appelez les filles, mais je veux dire la distance entre les bonnets).
la source
En physique, nous supposons que chaque dimension spatiale est infinie, ce qui rend la recherche d'espace pour de nouvelles dimensions assez difficile.
Lorsqu'il s'agit de tableaux finis, il est facile de trouver de l'espace.
Imaginez une feuille de papier avec une grille imprimée dessus; vous pouvez écrire des informations dans chaque cellule de la grille. C'est un tableau 2D: ligne et colonne.
Mettez plusieurs de ces feuilles de papier dans un dossier de fichiers; c'est un tableau 3D: page, ligne et colonne.
Mettez plusieurs de ces dossiers dans une boîte de fichier. Tableau 4D: dossier, page, ligne, colonne.
Disposez les boîtes dans une grille rectangulaire sur une palette en bois. Tableau 6D: boîte-ligne, boîte-colonne, dossier, page, ligne, colonne.
Empilez plus de grilles de boîtes par-dessus. Tableau 7D: profondeur de boîte, ligne de boîte, colonne de boîte, dossier, page, ligne, colonne.
Commencez à entasser des palettes dans un conteneur d'expédition: matrice 9D. (En supposant que chaque pile est aussi haute que l'intérieur du conteneur, vous ne pouvez donc obtenir que 2 dimensions supplémentaires ici.)
Empilez des conteneurs d'expédition sur le pont d'un porte-conteneurs: matrice 12D.
Votre flotte de porte-conteneurs est désormais un réseau 13D.
la source
Dans le système de coordonnées cartésiennes, vous avez les axes x et y sur un plan. Vous pouvez représenter n'importe quel nombre sur le plan comme (x, y).
Dans trois «espace» (autrement connu comme un cube), vous pouvez avoir les axes x, y et z. Vous pouvez représenter n'importe quel élément du cube sous la forme (x, y, z).
Dans un espace multivarié, vous pouvez avoir les axes x, y, z et, w (où l'axe w est "imaginaire"). Vous pouvez représenter n'importe quel élément de cet espace sous la forme (x, y, z, w).
Tous ces points dans l'espace sont désignés par des vecteurs. Dans quatre espaces, vous pouvez avoir deux vecteurs, où v1 = (x1, y1, z1, w1) et v2 = (x2, y2, z2, w2). Ensuite, vous manipulez ces vecteurs comme vous le feriez avec des nombres. Par exemple, la somme des deux vecteurs, v1 + v2 serait (x1, y1, z1, w1) + (x2, y2, z2, w2). Ensuite, vous ajoutez ces vecteurs terme par terme comme vous le feriez pour les nombres, pour obtenir: (x1 + x2, y1 + y2, z1 + z2, w1 + w2).
Votre programme définira les vecteurs à l'aide de tableaux appropriés, puis effectuera des opérations arithmétiques sur eux dans l'ordre approprié.
la source