Abstrakcyjny:
Tak więc, jak rozumiem (chociaż mam bardzo ograniczone rozumienie), istnieją trzy wymiary, z którymi (zwykle) pracujemy fizycznie:
Pierwszy byłby reprezentowany przez linię.
Drugi byłby reprezentowany przez kwadrat.
Trzeci byłby reprezentowany przez sześcian.
Wystarczająco proste, dopóki nie dotrzemy do czwartego - Trudno jest narysować w przestrzeni 3D, jeśli wiesz, co mam na myśli ... Niektórzy mówią, że ma to coś wspólnego z czasem .
Pytanie:
Teraz, choć to nie wszystko ma sens, to wszystko jest dla mnie świetne. Moje pytanie nie dotyczy tego, czy zadawałbym je na MathSO lub PhysicsSO. Moje pytanie brzmi: jak komputer radzi sobie z tablicami?
Wiem, że możesz tworzyć tablice 4D, 5D, 6D itp. ... w wielu różnych językach programowania, ale chcę wiedzieć, jak to działa.
Odpowiedzi:
Na szczęście programy nie są ograniczone fizycznymi ograniczeniami realnego świata. Tablice nie są przechowywane w przestrzeni fizycznej, więc liczba wymiarów tablicy nie ma znaczenia. Są spłaszczone do pamięci liniowej. Na przykład tablica jednowymiarowa z dwoma elementami może być określona jako:
Tablica 2x2 może wówczas wyglądać następująco:
Trójwymiarowa tablica 2x2x2 może być:
Miejmy nadzieję, że zobaczysz, dokąd to zmierza. Cztery wymiary mogą być:
źródło
int a[2][2][2];
trójwymiarowa.Nie musisz wyobrażać sobie w dużych wymiarach przestrzennych, po prostu pomyśl o tym jak o liściu paproci.
Główną łodygą jest twoja pierwsza tablica, w której każda gałąź jest przechowywanym przedmiotem. Jeśli spojrzymy na gałąź, jest to twój drugi wymiar. Ma podobną strukturę pochodzących z niego mniejszych gałęzi reprezentujących jego dane. Te z kolei mają własne małe gałęzie, które ciągną się do momentu, aż dotrzemy do maleńkich liści reprezentujących dane z wewnętrznej lub najwyższej tablicy wymiarów.
Możesz zobaczyć, jak się buduje, jeśli zadeklarujesz każdy poziom własną nazwą. Ponownie używam każdego poziomu zmiennej, aby zminimalizować kod:
źródło
Wymiary są czymkolwiek chcesz, czwarty wymiar niekoniecznie musi być czasem. Jeśli myślisz o trzech wymiarach jako sześcianie, możesz pomyśleć o 4 wymiarach jako rzędzie kostek. 5 wymiarów, siatka kostek i tak dalej.
Możesz także mieć kolekcję wokseli w 3D, gdzie czwartym wymiarem jest kolor, gęstość lub inna właściwość.
Gdy przydzielasz pamięć dla tablicy wielowymiarowej, po prostu przydziela ona iloczyn maksimum każdego wymiaru dla twojego typu danych. Jeśli masz tablicę 3d lub „sześcian” 10 elementów w każdym wymiarze, przydzielonych zostanie 1000 elementów. Jeśli utworzysz tablicę 4d z 10 elementami w czwartym wymiarze, komputer po prostu przydzieli 10 000. Podbij go do 5 wymiarów, a przydzieli 100 000.
Komputer nie dba o jakiekolwiek znaczenie tego, co reprezentuje każdy wymiar. Aby wybrać, gdzie na liście elementów znajduje się pojedynczy punkt, wystarczy pomnożyć, aby wybrać adres pamięci.
źródło
Wyobraź sobie, że wykonujesz prace badawczo-rozwojowe na nowym urządzeniu medycznym, szeregu czujników umieszczanych wzdłuż ramion pacjenta. Masz siedmiu ochotników w kolejce do testów. Każdy czujnik zgłasza odczyty niskiej, średniej i wysokiej częstotliwości, które wykonuje się co 100 ms przez około minutę.
Jak przechowywać wszystkie te dane w pamięci do analizy i kreślenia?
Oczywiście tablica. Wyglądałoby to tak (przy użyciu gotowego pseudokodu ogólnego):
To pięciowymiarowa tablica i nie ma w tym nic trudnego, tajemniczego ani zaskakującego. Nie ma powodu, aby próbować kojarzyć go z 5-wymiarową przestrzenią euklidesową. Aby uzyskać dowolną wartość danych, używamy wyrażenia podobnego
To tak jak odpytywanie relacyjnej bazy danych, w której masz rekord dla każdej wartości danych, z pięcioma kolumnami zawierającymi identyfikator pacjenta, identyfikator czujnika itd. Oraz kolumnę z wartością. Aby uzyskać jeden punkt danych, użyj pięciu terminów w polu GDZIE: WYBIERZ wartość z SensorData GDZIE (pacjentid = 6) i (sensorid = 5) i (arm = „left”) i (channel = „midfreq”) i (sampleindex = 338 ).
Nie ma nic mistycznego w tabeli bazy danych z pięcioma lub więcej kolumnami, prawda?
(Używam indeksowania opartego na 1, chociaż w rzeczywistości, oparte na 0 jest znacznie częstsze.)
Zauważ, że jestem złym chłopcem z powodu twardego zakodowania liczby ramion. Jeśli kiedykolwiek dostanę fundusze na zbadanie tych czujników na ośmiornicy, mam kłopoty!
źródło
Tablica to tylko blok ciągłej pamięci. Adresowanie do pamięci jest jednowymiarowe, możesz przejść do przodu lub do tyłu. Zakładając, że masz tablicę z 5 elementami, zarezerwowanych będzie 5 bloków pamięci. Jeśli masz dwuwymiarową tablicę z 5 elementami w każdym wymiarze, zarezerwowanych zostanie 25 bloków pamięci.
źródło
Cóż, w rzeczywistości matematycy nigdy (lub przynajmniej nie zwykle) kojarzą czwarty wymiar z czymś takim jak czas. Nie skojarzyliby też pierwszych trzech z czymkolwiek takim jak przestrzeń: matematycy po prostu definiują wymiar jako abstrakcyjną właściwość, zwykle przestrzeni wektorowej (często będzie to uogólnione na rozmaitości, a nawet przestrzenie metryczne ). A ta abstrakcyjna definicja nie dba o to, ile wymiarów ma fizyczna przestrzeń, w której się poruszamy. Pojęcie wymiarów dotyczy przestrzeni, które nawet nie przypominają przestrzeni fizycznej. W rzeczywistości matematycy (a nawet fizycy) bardzo często używają nieskończonych wymiarów przestrzenie, takie jak przestrzenie Hilberta w mechanice kwantowej.
Po wyjaśnieniu porozmawiajmy o tablicach - nie musisz rozumieć przestrzeni wektorowych, ponieważ abstrakcyjna definicja jest tutaj znacznie prostsza.
Tablica ( ℓ 0 × ℓ 1 × ℓ 2 × ... × ℓ n −1 ) (tj. O wymiarze n ) jest po prostu zbiorem ℓ 0 ⋅ ℓ 1 ⋅ ... ⋅ ℓ n −1 liczb ( lub jakikolwiek typ obiektu wypełnia tablicę). Jedyną różnicą w stosunku do jednowymiarowej tablicy o tej długości jest to, że masz szczególnie użyteczny sposób oddzielnego indeksowania wymiarów, a mianowicie
i lin = i n −1 + ℓ n −1 ⋅ ( i n −2 + ℓ n −1 ⋅ (... ℓ 2 ⋅ ( i 1 + ℓ 1 ⋅ i 0 ) ...))
źródło
imshow
w Pythonie) - może pokazywać dwa wymiary przestrzenne, a także trzeci wymiar koloru.W programowaniu tablice są dość łatwe do wdrożenia, ale może nie do zrozumienia.
Zasadniczo każdy poziom tablic oznacza, że zawartość ma
n
składane. To znaczyint x[4]
są 4 bloki, każdy z nich zawieraint
.int x[5][4]
jest 5 bloków, każdy z nich zawieraint[4]
.int x[3][5][4]
są 3 bloki, każdy z nich zawieraint[5][4]
.int x[2][3][5][4]
są 2 bloki, każdy z nich zawieraint[3][5][4]
.To, jak się do nich odnosisz, zależy od ciebie, ale dla lepszego zrozumienia masz coś takiego
COLUMN
dla ostatniegoROW
po drugiePAGE
po trzecieAż tu gdzieś to czytam. Aby tu zostać, możemy również zdefiniować
BOOK
za czwarty ostatniSHELF
na piątą ostatnią. (Lub, jeśli wolisz,SHELFROW
abyśmy mogli kontynuować.)To powiedziawszy, nigdy nie widziałem tablicy z więcej niż 4, a może 5 wymiarami w „dzikim życiu”.
W ten sposób możesz zdefiniować i wyobrazić sobie
int x[6][2][3][5][4]
jako zbiór 6 „półek”, każda z 2 książkami, każda z 3 stronami, każda z 5 rzędami, każda z 4 kolumnami.źródło
Pomyśl o jednowymiarowym układzie jak komoda:
Każda szuflada jest indeksem tablicy. W każdej szufladzie możesz umieścić, co chcesz, i do wielu celów każda szuflada będzie zawierać tylko jeden element (jest to jednowymiarowy układ).
Komoda jest jednak magiczna, więc nie ogranicza jej fizyczna przestrzeń. Oznacza to, że możesz umieścić kolejną komodę w każdej szufladzie pierwszej komody. Wewnętrzne komody mogą zawierać dowolne elementy. To dwuwymiarowa tablica.
Możesz więc powiedzieć coś w stylu „otwórz górną szufladę pierwszej komody z szufladami, wyjmij komodę z tej szuflady, a następnie otwórz dolną szufladę z drugiej komody”. To byłoby jak uzyskanie dostępu do indeksu tablicy 2D: myArray [0] [3];
I oczywiście, komody wewnątrz najbardziej zewnętrznej komody mogą same zawierać komody. To trójwymiarowa tablica.
Twoje pytanie brzmi: co to jest czterowymiarowa tablica? Oczywiście jest to komoda z komodami z komodami z komodami!
Szuflady są całkowicie opuszczone.
źródło
myArray[0][3]
tegomyArray[0][2]
. Ale poza tym dobre wytłumaczenie.Większość aspektów tego pytania zostało już rozważonych, ale myślę, że to pomoże, jeśli weźmiesz pod uwagę naturę wymiaru. Nie wszystkie wymiary są przestrzenne. Wymiar jest kontekstem pomiaru. Oto kilka przykładów:
„Czwarty” wymiar jest tylko czwarty, ponieważ istnieją trzy wymiary przestrzenne. Przestrzeń i czas wydają się duże, ponieważ, no cóż, wydają się duże. Bardzo prosto w twarz. Ale każda mierzalna, mierzalna jakość może być wymiarem, jeśli ją zmierzysz.
Na przykład biustonosze mają trzy wymiary: rozmiar miseczki, rozmiar klatki piersiowej i reklamy pełnoekranowe (nie wiem, jak to nazywają dziewczyny, ale mam na myśli odległość między miseczkami).
źródło
W fizyce zakładamy, że każdy wymiar przestrzenny jest nieskończony, co sprawia, że znalezienie miejsca na nowe wymiary jest dość trudne.
W przypadku tablic skończonych łatwo jest znaleźć miejsce.
Wyobraź sobie arkusz papieru z wydrukowaną na nim siatką; możesz napisać informacje w każdej komórce siatki. To tablica 2D: wiersz i kolumna.
Umieść kilka z tych arkuszy papieru w folderze plików; to tablica 3D: strona, wiersz i kolumna.
Umieść kilka z tych folderów w polu pliku. Tablica 4D: folder, strona, wiersz, kolumna.
Ułóż pudełka w prostokątną kratkę na drewnianej palecie. Tablica 6D: pole-wiersz, pole-kolumna, folder, strona, wiersz, kolumna.
Ułóż na nich więcej siatek pól. Tablica 7D: głębokość pola, pole wiersza, pole kolumny, folder, strona, wiersz, kolumna.
Rozpocznij wbijanie palet w pojemnik transportowy: tablica 9D. (Zakładając, że każdy stos jest tak wysoki jak wnętrze pojemnika, więc możesz uzyskać tylko 2 dodatkowe wymiary tutaj.)
Układaj kontenery na pokładzie statku kontenerowego: tablica 12D.
Twoja flota kontenerowców ma teraz tablicę 13D.
źródło
W kartezjańskim układzie współrzędnych masz osie xiy na płaszczyźnie. Możesz reprezentować dowolną liczbę na płaszczyźnie jako (x, y).
W trzy- „spacji” (znanej również jako sześcian) możesz mieć osie x, y i z. Możesz reprezentować dowolny element kostki jako (x, y, z).
W przestrzeni wielowymiarowej możesz mieć osie x, y, z i w (gdzie oś w jest „urojona”). Możesz reprezentować dowolny element tej przestrzeni jako (x, y, z, w).
Wszystkie te punkty w przestrzeni są oznaczone przez wektory. W czteroprzestrzeni możesz mieć dwa wektory, gdzie v1 = (x1, y1, z1, w1), a v2 = (x2, y2, z2, w2). Następnie manipulujesz tymi wektorami w taki sam sposób jak numery. Na przykład suma dwóch wektorów, v1 + v2 będzie (x1, y1, z1, w1) + (x2, y2, z2, w2). Następnie dodajesz te wektory termin po terminie, tak jak w liczbach, aby otrzymać: (x1 + x2, y1 + y2, z1 + z2, w1 + w2).
Twój program zdefiniuje wektory za pomocą odpowiednich tablic, a następnie wykona na nich operacje arytmetyczne w odpowiedniej kolejności.
źródło