¿Cómo funciona la "Cuarta Dimensión" con las matrices?

30

Abstracto:

Entonces, como lo entiendo (aunque tengo una comprensión muy limitada), hay tres dimensiones con las que (generalmente) trabajamos físicamente:

El primero estaría representado por una línea.
El segundo estaría representado por un cuadrado.
El tercero estaría representado por un cubo.

Suficientemente simple hasta llegar a la 4ta . Es un poco difícil dibujar en un espacio 3D, si sabes a lo que me refiero ... Algunas personas dicen que tiene algo que ver con el tiempo .

La pregunta:

Ahora, aunque eso no tiene mucho sentido, eso es genial para mí. Mi pregunta no es sobre esto, o lo estaría haciendo en MathSO o PhysicsSO. Mi pregunta es: ¿Cómo maneja la computadora esto con las matrices?

Sé que puede crear matrices 4D, 5D, 6D, etc. en muchos lenguajes de programación diferentes, pero quiero saber cómo funciona.

Questionmark
fuente
66
Si se pueden visualizar 3 dimensiones como un cubo, entonces se pueden visualizar 4 dimensiones como un montón de cubos en una línea. Se pueden visualizar 5 dimensiones como una cuadrícula donde cada celda de la cuadrícula contiene ... ¡un cubo! Y así sucesivamente ... La "Cuarta Dimensión" no tiene nada que ver con el tiempo (sea lo que sea), a menos que lo defina como tal en el contexto de la semántica de su programa.
FrustratedWithFormsDesigner
14
En general, puede superar esta joroba conceptual al tratar de evitar pensar en las dimensiones como construcciones estrictamente físicas. Por ejemplo, algunos problemas de aprendizaje automático pueden tener una dimensionalidad de cientos de miles, donde cada dimensión es una característica del conjunto de datos.
Steven Evers
44
(1) Espacio vectorial (2)
Arreglos
66
Además del comentario de Steve Evers, piense en un tipo de datos común: un color RGB. Tiene tres dimensiones, por lo que puede considerar el "espacio de color" RGB. Ahora agregue un componente alfa. Tienes cuatro dimensiones.
Josh Caswell
25
Recuerde que a la computadora no le importa la idea de las dimensiones geométricas, esos son solo un dispositivo para la conveniencia humana. Si asigna una matriz de 5x5x5x5, la computadora solo asigna una matriz de 625 elementos y hace cálculos matemáticos con sus índices en consecuencia.
David Zhang

Respuestas:

77

Afortunadamente, los programas no están limitados por las restricciones físicas del mundo real. Las matrices no se almacenan en el espacio físico, por lo que no importa el número de dimensiones de la matriz. Se aplanan en memoria lineal. Por ejemplo, una matriz unidimensional con dos elementos podría presentarse como:

(0) (1)

Una matriz dimensional de 2x2 podría ser:

(0,0) (0,1) (1,0) (1,1)

Una matriz tridimensional de 2x2x2 podría ser:

(0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) (1,0,1) (1,1,0) (1,1,1)

Esperemos que pueda ver a dónde va esto. Cuatro dimensiones pueden ser:

(0,0,0,0) (0,0,0,1) (0,0,1,0) (0,0,1,1) (0,1,0,0) (0,1,0,1) (0,1,1,0) (0,1,1,1)
(1,0,0,0) (1,0,0,1) (1,0,1,0) (1,0,1,1) (1,1,0,0) (1,1,0,1) (1,1,1,0) (1,1,1,1)
Greg Hewgill
fuente
10
Las matrices de computadoras no están limitadas por la comprensión o visualización humana, pero están limitadas por restricciones físicas, por ejemplo, una matriz de d dimensiones cada una de las cuales n tomará n ^ d, o más generalmente con diferentes dimensiones de longitud, n1 × n2 ×… × Dakota del Norte.
Acelerado
66
@ColtonAllen: no estoy muy seguro de a qué se refiere. La definición de dimensión dice "Hablando en términos generales, es el número de coordenadas necesarias para especificar un punto en el objeto". Una matriz declarada en C como int a[2][2][2];sería una matriz tridimensional.
Greg Hewgill
44
"Afortunadamente, los programas no están limitados por las restricciones físicas del mundo real" Entonces, ¿por eso todos los procesadores a 4.5THz, y a nadie le importa la jerarquía de memoria, no? Esta es realmente la respuesta más divertida que he leído ...
Manu343726
24
@ Manu343726 Se está refiriendo al hecho de que vivimos (teóricamente) en dimensiones limitadas de espacio y tiempo, pero las matrices en la memoria de la computadora tienen dimensiones "imaginarias", todo está almacenado en un espacio linealmente contiguo en la memoria, por lo que no se limitan al cantidad de dimensiones en las que vivimos. No troll> :(
Blackhawk
15
@ Manu343726: dije cuidadosamente Programas , no Computadoras . Esa es una de las mejores cosas del software.
Greg Hewgill
49

No necesita imaginar en grandes dimensiones espaciales, solo piense en ello como una hoja de helecho. hoja de helecho

El tallo principal es su primera matriz, y cada rama es un elemento que está almacenando. Si miramos una rama, esta es su segunda dimensión. Tiene una estructura similar de ramas más pequeñas que representan sus datos. Estos a su vez tienen sus propias ramas pequeñas que continúan hasta llegar a las pequeñas hojas que representan los datos de la matriz de dimensión más alta o más interna.

Puede ver esta acumulación si declara cada nivel con su propio nombre. Aquí estoy reutilizando cada variable de nivel para minimizar el código:

leaf = 2;
tinyBranch = [leaf, leaf, leaf];
middleBranch = [tinyBranch, tinyBranch, tinyBranch];
bigBranch = [middleBranch, middleBranch, middleBranch];
mainBranch = [bigBranch, bigBranch, bigBranch];
n00begon
fuente
1
¿Esta visualización no representaría más de cerca una matriz irregular?
Matt Johnson-Pint
2
@MattJohnson Formalmente sí, pero este ejemplo también explica / visualiza matrices multidimensionales.
M.Mimpen
44
+1 esto no es solo una visualización ordenada, sino más cercana a la verdad que la explicación lineal para muchas implementaciones de arreglos. Si la mayoría de las personas aquí restringiría o no el término "matriz" a la memoria contigua, " matriz multidimensional " es ciertamente el término utilizado para tales arreglos en la literatura para muchos idiomas.
DeveloperInDevelopment
46

Las dimensiones son lo que quieras ser, la cuarta dimensión no necesariamente tiene que ser el tiempo. Si piensa en tres dimensiones como un cubo, puede pensar en 4 dimensiones como una fila de cubos. 5 dimensiones, una cuadrícula de cubos, etc.

También podría tener una colección 3D de vóxeles, con una cuarta dimensión que es el color, la densidad o alguna otra propiedad.

Cuando asigna la memoria para su matriz multidimensional, simplemente asigna el producto de cada dimensión máxima para su tipo de datos. Si tiene una matriz 3D o 'cubo' de 10 elementos en cada dimensión, tendrá 1,000 elementos asignados. Si lo convierte en una matriz 4d con 10 elementos en la 4ta dimensión, la computadora solo asignará 10,000. Aumente hasta 5 dimensiones y asignará 100,000.

A la computadora no le importa ningún tipo de significado sobre lo que representa cada dimensión. Para seleccionar en qué parte de la lista de elementos se encuentra un solo punto, es solo multiplicación seleccionar una dirección de memoria.

whatsisname
fuente
26

Imagínese haciendo I + D en un nuevo dispositivo médico, una serie de sensores que coloca a lo largo de los brazos de un paciente. Tienes siete voluntarios en fila para las pruebas. Cada sensor informa lecturas de baja frecuencia, frecuencia media y alta frecuencia, que toma una vez cada 100 ms durante aproximadamente un minuto.

¿Cómo almacenar todos esos datos en la memoria para su análisis y trazado?

Una matriz, obviamente. Se vería así (usando un pseudocódigo genérico inventado):

npatients = 7
nsensors = 4     // number of sensors on an arm
nchannels = 3
nsamples = 60.0 / 0.1
sensordata = Array[ npatients, nsensors, 2, nchannels, nsamples ]

Esa es una matriz de cinco dimensiones, y no hay nada complicado, misterioso o desconcertante al respecto. No hay razón para intentar asociarlo con el espacio euclidiano de 5 dimensiones. Para obtener cualquier valor de datos, usamos una expresión como

x = sensordata[6, 5, 1, 2, 338)

Es como consultar una base de datos relacional donde tiene un registro para cada valor de datos, con cinco columnas que contienen la identificación del paciente, la identificación del sensor, etc., y una columna con el valor. Para obtener un punto de datos, utilice cinco términos en WHERE: SELECCIONE el valor de SensorData WHERE (patientid = 6) y (sensorid = 5) y (arm = "left") y (channel = "midfreq") y (sampleindex = 338 )

No hay nada místico sobre una tabla de base de datos con cinco o más columnas, ¿verdad?

(Estoy usando indexación basada en 1, aunque en la vida real, la basada en 0 es mucho más común).

Tenga en cuenta que soy un chico malo debido a la codificación de la cantidad de armas. Si alguna vez me dan fondos para investigar estos sensores en un pulpo, ¡estoy en problemas!

DarenW
fuente
3
+1 Excelente ejemplo que demuestra que las dimensiones pueden ser cualquier dato que necesite.
Mike apoya a Mónica el
20

Una matriz es solo un bloque de memoria continua. El direccionamiento de memoria es unidimensional, puede avanzar o retroceder. Asumiendo que tiene una matriz con 5 elementos, se reservarán 5 bloques de memoria. Si tiene una matriz bidimensional con 5 elementos en cada dimensión, se reservarán 25 bloques de memoria.

Zillolo
fuente
55
Sí, tenga esto en cuenta a medida que agrega más dimensiones a sus matrices. El uso de la memoria puede no ser trivial.
davidhaskins
18

... o lo estaría preguntando en MathSO ...

Bueno, de hecho, los matemáticos nunca (o al menos no usualmente) asociarían una cuarta dimensión con algo como el tiempo. Tampoco asociarían los primeros tres con nada parecido al espacio: los matemáticos simplemente definen la dimensión como una propiedad abstracta de, típicamente, un espacio vectorial (a menudo esto se generalizará a múltiples o incluso espacios métricos ). Y a esta definición abstracta no le importan cuántas dimensiones tiene el espacio físico en el que nos movemos. El concepto de dimensiones se aplica a espacios que ni siquiera se parecen al espacio físico. De hecho, los matemáticos (y de hecho los físicos) muy a menudo usan dimensiones infinitas espacios, como los espacios de Hilbert de la mecánica cuántica.

Con eso aclarado, hablemos de matrices: no es necesario que comprenda los espacios vectoriales, ya que la definición abstracta es en realidad mucho más simple aquí.

An ( 0 × 1 × 2 × ... × n -1 ) array -sized (es decir, de dimensión n ) es simplemente una colección de 01 ⋅ ... ⋅ n -1 números ( o cualquier tipo de objeto que llena la matriz). La única diferencia con una matriz unidimensional de esa longitud es que tiene una forma útil particular de indexar las dimensiones por separado, es decir

i lin = i n −1 + n −1 ⋅ ( i n −2 + n −1 ⋅ (... 2 ⋅ ( i 1 + 1i 0 ) ...))

a la izquierda
fuente
Para ser claros, solo necesita una matriz con 3 elementos para describir 3 dimensiones, y una matriz de N elementos describe N dimensiones. Sin embargo, detallar cada vector es una historia diferente. Muchas veces, se hace mostrando una imagen ( imshowen Python): puede mostrar dos dimensiones espaciales y una tercera dimensión de color.
Scott
@Scott: Estoy de acuerdo en que la noción de "dimensión de una matriz" es desafortunada porque significa algo no relacionado con la dimensionalidad de un espacio cuyos vectores podría representar por las matrices. (Sin embargo, también creo que, en primer lugar, no es una buena idea representar vectores mediante matrices simples y sin distracciones). Un mejor nombre podría ser el rango de una matriz, en analogía con los tensores .
Leftaroundabout
13

En programación, las matrices son bastante fáciles de implementar, pero tal vez no se entiendan.

Generalmente, cada nivel de matrices significa tener el contenido nplegado. Eso significa

  • int x[4]son 4 bloques, cada uno de ellos contiene un int.
  • int x[5][4]son 5 bloques, cada uno de ellos contiene un int[4].
  • int x[3][5][4]son 3 bloques, cada uno de ellos contiene un int[5][4].
  • int x[2][3][5][4]son 2 bloques, cada uno de ellos contiene un int[3][5][4].

La forma en que te refieres a ellos depende de ti, pero para una mejor comprensión, tienes algo como

  • COLUMN para el último
  • ROW para el penúltimo
  • PAGE para el penúltimo

Hasta aquí, lo leí en alguna parte. Para quedarnos aquí, también podemos definir

  • BOOK para el penúltimo
  • y tal vez SHELFpara el quinto y último. (O, si lo prefiere, SHELFROWpara que podamos continuar).

Dicho esto, nunca vi una matriz con más de 4 o quizás 5 dimensiones en "vida salvaje".

De esta manera, puede definir e imaginar int x[6][2][3][5][4]como una colección de 6 "estantes", cada uno con 2 libros, cada uno con 3 páginas, cada uno con 5 filas, cada uno con 4 columnas.

glglgl
fuente
13

Piense en una matriz unidimensional como una cómoda:

cajonera

Cada cajón es un índice de la matriz. Puede poner lo que quiera en cada cajón, y para muchos propósitos, cada cajón solo contendrá un único elemento (que es una matriz unidimensional).

Sin embargo, esta cómoda es mágica, por lo que no está limitada por el espacio físico. Eso significa que puede colocar otra cómoda dentro de cada gaveta de la primera cómoda. Las cajoneras interiores pueden contener lo que quieras. Esa es una matriz bidimensional.

Entonces puede decir algo como "abra el cajón superior de la primera cómoda, saque la cómoda de ese cajón, luego abra el cajón inferior de esa segunda cómoda". Eso sería como acceder a un índice de una matriz 2D: myArray [0] [3];

Y, por supuesto, las cajoneras dentro de la cajonera más exterior pueden contener cajoneras. Esa es una matriz tridimensional.

Entonces, su pregunta es: ¿qué es una matriz de cuatro dimensiones? Es una cómoda de cómodas, de cómodas, de cómodas, de cómodas, por supuesto.

Son cajones hasta el fondo.

Kevin Workman
fuente
44
Son cajoneras hasta el fondo, hombre.
Thomas Eding
8
¿Y en la última cómoda? Tortugas .
Kevin Workman
Siendo un poco pedante. Dado que hay 3 cajones en cada cofre (según la imagen), no 4, y está utilizando un índice base 0, el cajón inferior sería 2 no 3. Entonces, en lugar de myArray[0][3]eso sería myArray[0][2]. Pero por lo demás buena explicación.
Tom escuchó el
@TomHeard La primera cómoda tiene 3 cajones, pero la cómoda dentro del primer cajón tiene 4 cajones. Duh! : p
Kevin Workman
1
Oh, eso está bien. = D
Tom escuchó el
5

La mayoría de los aspectos de esta pregunta ya se han considerado, pero creo que será útil si se considera la naturaleza de una dimensión. No todas las dimensiones son espaciales. Una dimensión es un contexto para la medición. Aquí hay unos ejemplos:

  • Frecuencia: color o tono
  • Masa
  • Valencia
  • Color (quark up, quark down, quark extraño, quark encantado, etc.)
  • Dirección de giro
  • Ángulo
  • Volumen
  • Picante (de chile)

La "cuarta" dimensión es solo la cuarta porque hay tres dimensiones espaciales. El espacio y el tiempo se vislumbran porque, bueno, se vislumbran. Mucho en tu cara. Pero cualquier calidad cuantificable y medible puede ser una dimensión si la mide.

Por ejemplo, los sostenes tienen tres dimensiones: tamaño de copa, tamaño de cofre e intersticial (no sé cómo lo llaman ustedes, pero me refiero a la distancia entre tazas).

Peter
fuente
1
"No todas las dimensiones son espaciales". Para las matrices, todas las dimensiones son espaciales.
Rhymoid
2
@Rhymoid: para las matrices, ninguna dimensión es inherentemente espacial en la forma en que pensamos sobre el espacio. : P Los definimos para representar lo que queramos.
cHao
@cHao Quizás si nos fijamos en la semántica de los datos que almacenan. Pero en el lado de la representación / sintáctico / implementación, todas las dimensiones de la matriz son inherentemente espaciales. De hecho, es de lo que depende cuando se utilizan matrices como parte de un algoritmo.
Rhymoid
@Rhymoid: Ese es el mismo proceso de pensamiento que llevó a que esta pregunta se hiciera en primer lugar. Una dimensión que se puede enumerar no la hace espacial. Implementando, no hay espacio. Solo hay memoria, y la memoria es unidimensional hasta donde un programa sabe / ve / se preocupa.
cHao
@cHao: en la implementación, hay espacio, porque también hay tiempo. El término 'pérdida de espacio' (como alternativa para 'pérdida de memoria', que se encuentra en la comunidad de Haskell) no es una coincidencia. El hecho de que la memoria se describa como unidimensional es una herencia de BCPL.
Rhymoid
4

En física, suponemos que cada dimensión espacial es infinita, lo que hace que sea bastante difícil encontrar espacio para nuevas dimensiones.

Cuando se trata de matrices finitas, es fácil encontrar espacio.

Imagine una hoja de papel con una cuadrícula impresa; Puede escribir información en cada celda de la cuadrícula. Esa es una matriz 2D: fila y columna.

Ponga varias de esas hojas de papel en una carpeta de archivos; eso es una matriz 3D: página, fila y columna.

Ponga varias de esas carpetas en un cuadro de archivo. Matriz 4D: carpeta, página, fila, columna.

Organice las cajas en una cuadrícula rectangular sobre una paleta de madera. Matriz 6D: cuadro-fila, cuadro-columna, carpeta, página, fila, columna.

Apila más cuadrículas de cajas encima de ellas. Matriz 7D: profundidad de caja, fila de caja, columna de caja, carpeta, página, fila, columna.

Comience a meter paletas en un contenedor de envío: matriz 9D. (Suponiendo que cada pila es tan alta como el interior del contenedor, por lo que solo puede obtener 2 dimensiones más aquí).

Apile los contenedores de envío en la cubierta de un barco de contenedores: matriz 12D.

Su flota de portacontenedores ahora es una matriz 13D.

Russell Borogove
fuente
"Asumimos que cada dimensión espacial es infinita". Infinito no es el problema más importante aquí en realidad, continuo es el problema "real" (es decir, infinitamente infinito, y necesitamos un mapeo homeomórfico para que sea físicamente significativo).
Leftaroundabout
3

En el sistema de coordenadas cartesianas, tiene los ejes x e y en un plano. Puede representar cualquier número en el plano como (x, y).

En tres "espacios" (también conocido como cubo), puede tener los ejes x, y y z. Puede representar cualquier elemento del cubo como (x, y, z).

En el espacio multivariante, puede tener los ejes x, y, z y w (donde el eje w es "imaginario"). Puede representar cualquier elemento de ese espacio como (x, y, z, w).

Todos estos puntos en el espacio se denotan por vectores. En cuatro espacios, puede tener dos vectores, donde v1 = (x1, y1, z1, w1) y v2 = (x2, y2, z2, w2). Luego manipulas estos vectores como lo harías con los números. Por ejemplo, la suma de los dos vectores, v1 + v2 sería (x1, y1, z1, w1) + (x2, y2, z2, w2). Luego agrega estos vectores término por término como lo haría con los números, para obtener: (x1 + x2, y1 + y2, z1 + z2, w1 + w2).

Su programa definirá los vectores usando las matrices apropiadas y luego realizará operaciones aritméticas en ellos en el orden apropiado.

Tom Au
fuente