Como a "Quarta Dimensão" funciona com matrizes?

30

Abstrato:

Então, como eu o entendo (embora eu tenha um entendimento muito limitado), existem três dimensões com as quais (geralmente) trabalhamos fisicamente:

O primeiro seria representado por uma linha.
O segundo seria representado por um quadrado.
O terceiro seria representado por um cubo.

Simples o suficiente até chegarmos ao dia 4 - é meio difícil desenhar em um espaço 3D, se é que você me entende ... Algumas pessoas dizem que isso tem algo a ver com o tempo .

A questão:

Agora, embora isso não faça muito sentido, tudo é ótimo comigo. Minha pergunta não é sobre isso, ou eu estaria perguntando no MathSO ou no PhysicsSO. Minha pergunta é: como o computador lida com isso com matrizes?

Eu sei que você pode criar matrizes 4D, 5D, 6D, etc ... em muitas linguagens de programação diferentes, mas quero saber como isso funciona.

Ponto de interrogação
fonte
66
Se três dimensões puderem ser visualizadas como um cubo, quatro dimensões poderão ser visualizadas como um monte de cubos em uma linha. 5 dimensões podem ser visualizadas como uma grade, onde cada célula da grade contém ... um cubo! E assim por diante ... A "Quarta Dimensão" não tem nada a ver com o tempo (seja o que for), a menos que você a defina como tal no contexto da semântica do seu programa.
FrustratedWithFormsDesigner
14
Em geral, você pode superar esse problema conceitual tentando evitar pensar em dimensões como construções estritamente físicas. Por exemplo, alguns problemas de aprendizado de máquina podem ter uma dimensionalidade na casa das centenas de milhares, onde cada dimensão é um recurso do conjunto de dados.
9118 Steven Evers
6
Além do comentário de Steve Evers, pense em um tipo de dados comum: uma cor RGB. Isso tem três dimensões, para que você possa considerar o "espaço de cores" RGB. Agora adicione um componente alfa. Você tem quatro dimensões.
Josh Caswell
25
Lembre-se de que o computador não se importa com a idéia de dimensões geométricas - essas são apenas um dispositivo para conveniência humana. Se você alocar uma matriz de 5x5x5x5, o computador apenas aloca uma matriz de 625 elementos e faz cálculos com seus índices de acordo.
David Zhang

Respostas:

77

Felizmente, os programas não são limitados pelas restrições físicas do mundo real. As matrizes não são armazenadas no espaço físico, portanto, o número de dimensões da matriz não importa. Eles são achatados na memória linear. Por exemplo, uma matriz unidimensional com dois elementos pode ser apresentada como:

(0) (1)

Uma matriz dimensional 2x2 pode ser:

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

Uma matriz 2x2x2 tridimensional pode 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)

Espero que você possa ver para onde isso está indo. Quatro dimensões podem 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
fonte
10
Matrizes de computador não são limitadas pela compreensão ou visualização humana, mas são limitadas por restrições físicas, por exemplo, uma matriz de d dimensões cada uma com comprimento n terá n ^ d, ou mais geralmente com diferentes dimensões, n1 × n2 ×… × nd.
acelent
6
@ ColtonAllen: Não sei bem ao que você está se referindo. A definição de dimensão diz "Grosso modo, é o número de coordenadas necessárias para especificar um ponto no objeto". Uma matriz declarada em C como int a[2][2][2];seria uma matriz tridimensional.
9608 Greg Hewgill #
4
"Felizmente, os programas não são limitados pelas restrições físicas do mundo real". É por isso que todos nós temos processadores em 4.5THz e ninguém se importa com a hierarquia de memória, não é? Esta é realmente a resposta mais engraçado eu readed ....
Manu343726
24
@ Manu343726 Ele está se referindo ao fato de que vivemos em dimensões (teoricamente) limitadas de espaço e tempo, mas os arrays na memória do computador têm dimensões "fingidas" - tudo é armazenado em um espaço linearmente contíguo na memória - para que não se limitem ao número de dimensões em que vivemos. Não trollar> :(
Blackhawk
15
@ Manu343726: Eu disse com cuidado Programas , não Computadores . Essa é uma das grandes coisas do software.
Greg Hewgill
49

Você não precisa imaginar em altas dimensões espaciais, pense nisso como uma folha de samambaia. folha de samambaia

O caule principal é sua primeira matriz, com cada filial sendo um item que está armazenando. Se olharmos para um ramo, esta é sua segunda dimensão. Ele possui uma estrutura semelhante de ramificações menores representando seus dados. Estes, por sua vez, têm seus próprios pequenos ramos, que continuam até chegarmos às folhas minúsculas que representam os dados da matriz de dimensão mais alta ou mais interna.

Você pode ver essa construção se declarar cada nível com seu próprio nome. Aqui estou reutilizando cada nível de variável para minimizar o código:

leaf = 2;
tinyBranch = [leaf, leaf, leaf];
middleBranch = [tinyBranch, tinyBranch, tinyBranch];
bigBranch = [middleBranch, middleBranch, middleBranch];
mainBranch = [bigBranch, bigBranch, bigBranch];
n00begon
fonte
11
Essa visualização não representaria mais de perto uma matriz irregular?
Matt Johnson-Pint
2
@MattJohnson Formalmente sim, mas este exemplo também explica / visualiza matrizes multidimensionais.
precisa saber é o seguinte
4
+1, isso não é apenas uma visualização elegante, mas mais próxima da verdade do que a explicação linear para muitas implementações de array. Quer a maioria das pessoas aqui restrinja ou não o termo "matriz" à memória contígua, " matriz multidimensional " é certamente o termo usado para tais arranjos na literatura para muitos idiomas.
DeveloperInDevelopment
46

As dimensões são o que você quer ser, a quarta dimensão não precisa necessariamente ser tempo. Se você pensar em três dimensões como um cubo, poderá pensar em quatro dimensões como uma linha de cubos. 5 dimensões, uma grade de cubos e assim por diante.

Você também pode ter uma coleção 3d de voxels, com uma quarta dimensão sendo cor, densidade ou alguma outra propriedade.

Quando você aloca a memória para sua matriz multidimensional, ela simplesmente aloca o produto de cada dimensão máxima para o seu tipo de dados. Se você tiver uma matriz 3d ou 'cubo' de 10 elementos em cada dimensão, terá 1.000 elementos alocados. Se você criar uma matriz 4d com 10 elementos na 4ª dimensão, o computador apenas alocará 10.000. Aumentar até 5 dimensões e ele alocará 100.000.

O computador não se importa com nenhum tipo de significado sobre o que cada dimensão representa. Para selecionar onde na lista de elementos está um único ponto, basta multiplicar para selecionar um endereço de memória.

whatsisname
fonte
26

Imagine fazer P&D em algum novo dispositivo médico, uma série de sensores que você coloca nos braços de um paciente. Você tem sete voluntários alinhados para testes. Cada sensor relata leituras de baixa frequência, média e alta frequência, que você faz uma vez a cada 100 ms por aproximadamente um minuto.

Como armazenar todos esses dados na memória para análise e plotagem?

Uma matriz, obviamente. Seria assim (usando 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 ]

Essa é uma matriz em cinco dimensões, e não há nada de complicado, misterioso ou desconcertante. Não há razão para tentar associá-lo ao espaço euclidiano 5-dimensional. Para obter qualquer valor de dados, usamos uma expressão como

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

É como consultar um banco de dados relacional onde você tem um registro para cada valor de dados, com cinco colunas contendo a identificação do paciente, a identificação do sensor e assim por diante, e uma coluna com o valor. Para obter um ponto de dados, use cinco termos no WHERE: SELECT value FROM SensorData WHERE (Patientid = 6) and (sensorid = 5) and (arm = "left") and (channel = "midfreq") and (sampleindex = 338 )

Não há nada místico em uma tabela de banco de dados com cinco ou mais colunas, existe?

(Estou usando a indexação baseada em 1, embora na vida real, a baseada em 0 seja muito mais comum.)

Note que eu sou um garoto mau, devido à codificação do número de armas. Se alguma vez recebi financiamento para investigar esses sensores em um polvo, estou com problemas!

DarenW
fonte
3
+1 Excelente exemplo de demonstração de que as dimensões podem ser quaisquer dados necessários.
Mike Suporta Monica
20

Uma matriz é apenas um bloco de memória contínua. O endereçamento de memória é unidimensional, você pode avançar ou retroceder. Portanto, supondo que você tenha uma matriz com 5 elementos, 5 blocos de memória serão reservados. Se você tiver uma matriz bidimensional com 5 elementos em cada dimensão, 25 blocos de memória serão reservados.

Zillolo
fonte
5
Sim, lembre-se disso ao adicionar mais dimensões às suas matrizes. O uso da memória pode não ser trivial.
Davidhaskins
18

... ou eu estaria perguntando isso no MathSO ...

Bem, na verdade os matemáticos nunca (ou pelo menos não costumam) associar uma quarta dimensão a algo como o tempo. Nem associariam os três primeiros a algo como espaço: os matemáticos simplesmente definem dimensão como uma propriedade abstrata de, tipicamente, um espaço vetorial (geralmente isso será generalizado em variedades ou mesmo espaços métricos ). E essa definição abstrata não se importa com quantas dimensões o espaço físico em que nos movemos possui. O conceito de dimensões se aplica a espaços que nem se parecem com o espaço físico. De fato, matemáticos (e até físicos) costumam usar dimensões infinitas espaços, como os espaços de Hilbert da mecânica quântica.

Com isso esclarecido, vamos falar de matrizes - você não precisa entender os espaços vetoriais, pois a definição abstrata é realmente muito mais simples aqui.

Um ( 0 × 1 × 2 × ... × n -1 ) -sized matriz (isto é, de dimensão n ) é simplesmente uma colecção de 01 ⋅ ... ⋅ n -1 números ( ou qualquer tipo de objeto que preencha a matriz). A única diferença para uma matriz unidimensional desse comprimento é que você tem uma maneira útil de indexar as dimensões separadamente, a saber

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

leftaroundabout
fonte
Para ser claro, você só precisa de uma matriz com 3 elementos para descrever três dimensões, e uma matriz de elementos N descreve N dimensões. No entanto, detalhar cada vetor é uma história diferente. Muitas vezes, isso é feito mostrando uma imagem ( imshowem Python) - ele pode mostrar duas dimensões espaciais e uma terceira dimensão de cor.
Scott
@ Scott: Concordo que a noção de "dimensão de uma matriz" é lamentável, porque significa algo não relacionado à dimensionalidade de um espaço cujos vetores você pode representar pelas matrizes. (No entanto, também acho que não é uma boa idéia representar vetores em arranjos simples e sem abstração.) Um nome melhor pode ser a classificação de uma matriz, em analogia aos tensores .
precisa saber é o seguinte
13

Na programação, as matrizes são bastante fáceis de implementar, mas talvez não sejam entendidas.

Geralmente, cada nível de matrizes significa ter o conteúdo ndobrado. Que significa

  • int x[4]são 4 blocos, cada um deles contendo um int.
  • int x[5][4]são 5 blocos, cada um deles contendo um int[4].
  • int x[3][5][4]são 3 blocos, cada um deles contendo um int[5][4].
  • int x[2][3][5][4]são 2 blocos, cada um deles contendo um int[3][5][4].

Como você está se referindo a eles depende de você, mas para uma melhor compreensão, você tem algo como

  • COLUMN para o último
  • ROW para o penúltimo
  • PAGE para o terceiro último

Até aqui, eu li em algum lugar. Para ficar aqui, também podemos definir

  • BOOK para o quarto último
  • e talvez SHELFpara o quinto último. (Ou, se preferir, SHELFROWpara que possamos continuar.)

Dito isto, nunca vi matrizes com mais de 4 ou talvez 5 dimensões na "vida selvagem".

Dessa forma, você pode definir e imaginar int x[6][2][3][5][4]como uma coleção de 6 "prateleiras", cada uma com 2 livros, cada uma com 3 páginas, cada uma com 5 linhas, cada uma com 4 colunas.

glglgl
fonte
13

Pense em uma matriz unidimensional como uma cômoda:

cômoda

Cada gaveta é um índice da matriz. Você pode colocar o que quiser em cada gaveta e, para muitos propósitos, cada gaveta conterá apenas um único item (que é uma matriz unidimensional).

Esta cômoda é mágica, portanto, não é limitada pelo espaço físico. Isso significa que você pode colocar outra cômoda dentro de cada gaveta da primeira cômoda. As caixas de gavetas internas podem conter o que você quiser. Essa é uma matriz bidimensional.

Então, você pode dizer algo como "abra a gaveta superior da primeira cômoda, retire a cômoda dessa gaveta e abra a gaveta inferior da segunda cômoda". Seria como acessar um índice de uma matriz 2D: myArray [0] [3];

E, é claro, as cômodas dentro da cômoda mais externa podem conter cômodas. Essa é uma matriz tridimensional.

Então, sua pergunta é: o que é uma matriz quadridimensional? É uma cômoda de caixas de gavetas de caixas de gavetas de caixas de gavetas, é claro!

São gavetas até o fim.

Kevin Workman
fonte
4
São caixas de gavetas até o fim, cara.
Thomas Eding
8
E na última cômoda? Tartarugas .
Kevin Workman
Sendo um pouco pedante. Dado que há 3 gavetas em cada baú (com base na figura), não 4, e você está usando um índice de base 0, a gaveta inferior seria 2 e não 3. Portanto, em vez disso myArray[0][3], seria myArray[0][2]. Mas de outra maneira boa explicação.
Tom Heard
@TomHeard A primeira cômoda possui 3 gavetas, mas a cômoda dentro da primeira gaveta possui 4 gavetas. Duh! : p
Kevin Workman
11
Oh, então tudo bem. = D
Tom Heard
5

A maioria dos aspectos desta questão já foi considerada, mas acho que ajudará se você considerar a natureza de uma dimensão. Nem todas as dimensões são espaciais. Uma dimensão é um contexto para medição. aqui estão alguns exemplos:

  • Frequência - cor ou tom
  • Massa
  • Valência
  • Cor (para cima, para baixo, para baixo, para baixo, para baixo, para baixo, para baixo, etc)
  • Direção da rotação
  • Ângulo
  • Loudness
  • Gostosura (de pimenta)

A "quarta" dimensão é apenas a quarta porque existem três dimensões espaciais. O espaço e o tempo parecem grandes porque, bem, eles parecem grandes. Muito na sua cara. Mas qualquer qualidade quantificável e mensurável pode ser uma dimensão, se você a medir.

Por exemplo, soutiens têm três dimensões: tamanho do copo, tamanho do peito e intersticial (não sei como vocês chamam, mas quero dizer a distância entre os copos).

Pedro
fonte
11
"Nem todas as dimensões são espaciais." Para matrizes, todas as dimensões são espaciais.
Rhymoid
2
@Rhymoid: para matrizes, nenhuma dimensão é inerentemente espacial na maneira como pensamos sobre o espaço. : P Nós os definimos para representar o que queremos.
cHao
@cHao Talvez se você olhar para a semântica dos dados que eles armazenam. Mas no lado representacional / sintático / de implementação, todas as dimensões da matriz são inerentemente espaciais. Na verdade, é disso que você depende quando usa matrizes como parte de um algoritmo.
Rhymoid
@Rhymoid: Esse é o mesmo processo de pensamento que levou a essa pergunta ser feita em primeiro lugar. Uma dimensão que é enumerável não a torna espacial. Em termos de implementação, não há espaço. Existe apenas memória, e a memória é unidimensional, tanto quanto um programa sabe / vê / se importa.
cHao 6/07/2014
@cHao: em termos de implementação, há espaço, porque também há tempo. O termo 'vazamento de espaço' (como uma alternativa para 'vazamento de memória', encontrado na comunidade Haskell) não é coincidência. O fato de a memória ser descrita como unidimensional é uma herança do BCPL.
Rhymoid
4

Na física, assumimos que cada dimensão espacial é infinita, o que torna bastante difícil encontrar espaço para novas dimensões.

Ao lidar com matrizes finitas, é fácil encontrar espaço.

Imagine uma folha de papel com uma grade impressa; você pode escrever algumas informações em cada célula da grade. Essa é uma matriz 2D: linha e coluna.

Coloque várias dessas folhas de papel em uma pasta de arquivo; isso é uma matriz 3D: página, linha e coluna.

Coloque várias dessas pastas em uma caixa de arquivo. Matriz 4D: pasta, página, linha, coluna.

Organize as caixas em uma grade retangular em um palete de madeira. Matriz 6D: linha-caixa, coluna-caixa, pasta, página, linha, coluna.

Empilhe mais grades de caixas em cima delas. Matriz 7D: profundidade da caixa, linha da caixa, coluna da caixa, pasta, página, linha, coluna.

Comece a amontoar paletes em um contêiner de remessa: matriz 9D. (Supondo que cada pilha tenha a mesma altura que o interior do contêiner, você pode obter apenas mais duas dimensões aqui.)

Empilhe contêineres no convés de um navio de contêineres: matriz 12D.

Sua frota de navios porta-contêineres agora é uma matriz 13D.

Russell Borogove
fonte
"assumimos que cada dimensão espacial é infinita" infinito não é o maior negócio aqui, na verdade, contínuo é o problema "real" (ou seja, infinitamente contável, e precisamos de um mapeamento homeomórfico para que seja fisicamente significativo).
precisa saber é o seguinte
3

No sistema de coordenadas cartesianas, você tem os eixos x e y em um plano. Você pode representar qualquer número no plano como (x, y).

Em três "espaços" (também conhecido como cubo), você pode ter os eixos x, ye z. Você pode representar qualquer elemento do cubo como (x, y, z).

No espaço multivariado, você pode ter os eixos x, y, z e, w (onde o eixo w é "imaginário"). Você pode representar qualquer elemento desse espaço como (x, y, z, w).

Todos esses pontos no espaço são indicados por vetores. No espaço quatro, você pode ter dois vetores, em que v1 = (x1, y1, z1, w1) e v2 = (x2, y2, z2, w2). Então você manipula esses vetores como numeraria. Por exemplo, a soma dos dois vetores, v1 + v2, seria (x1, y1, z1, w1) + (x2, y2, z2, w2). Em seguida, adicione esses vetores termo a termo, da mesma forma que os números, para obter: (x1 + x2, y1 + y2, z1 + z2, w1 + w2).

Seu programa definirá os vetores usando matrizes apropriadas e executará operações aritméticas neles na ordem apropriada.

Tom Au
fonte