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.
Respostas:
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:
Uma matriz dimensional 2x2 pode ser:
Uma matriz 2x2x2 tridimensional pode ser:
Espero que você possa ver para onde isso está indo. Quatro dimensões podem ser:
fonte
int a[2][2][2];
seria uma matriz tridimensional.Você não precisa imaginar em altas dimensões espaciais, pense nisso como uma 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:
fonte
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.
fonte
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):
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
É 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!
fonte
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.
fonte
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 ℓ 0 ⋅ ℓ 1 ⋅ ... ⋅ ℓ 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 + ℓ 1 ⋅ i 0 ) ...))
fonte
imshow
em Python) - ele pode mostrar duas dimensões espaciais e uma terceira dimensão de cor.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
n
dobrado. Que significaint x[4]
são 4 blocos, cada um deles contendo umint
.int x[5][4]
são 5 blocos, cada um deles contendo umint[4]
.int x[3][5][4]
são 3 blocos, cada um deles contendo umint[5][4]
.int x[2][3][5][4]
são 2 blocos, cada um deles contendo umint[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 últimoROW
para o penúltimoPAGE
para o terceiro últimoAté aqui, eu li em algum lugar. Para ficar aqui, também podemos definir
BOOK
para o quarto últimoSHELF
para o quinto último. (Ou, se preferir,SHELFROW
para 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.fonte
Pense em uma matriz unidimensional como uma 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.
fonte
myArray[0][3]
, seriamyArray[0][2]
. Mas de outra maneira boa explicação.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:
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).
fonte
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.
fonte
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.
fonte