Аннотация:
Итак, насколько я понимаю (хотя у меня очень ограниченное понимание), есть три измерения, с которыми мы (обычно) работаем физически:
1-й будет представлен линией.
2-й будет представлен квадратом.
3-й будет представлен кубом.
Достаточно просто, пока мы не дойдем до четвертого. Трудно рисовать в трехмерном пространстве, если вы понимаете, что я имею в виду ... Некоторые люди говорят, что оно как- то связано со временем .
Вопрос:
Теперь, хотя это не имеет особого смысла, это прекрасно для меня. Мой вопрос не об этом, или я буду задавать его на MathSO или PhysicsSO. Мой вопрос: как компьютер справляется с массивами?
Я знаю, что вы можете создавать массивы 4D, 5D, 6D и т. Д. На разных языках программирования, но я хочу знать, как это работает.
Ответы:
К счастью, программы не ограничены физическими ограничениями реального мира. Массивы не хранятся в физическом пространстве, поэтому количество измерений массива не имеет значения. Они расплющены в линейную память. Например, одномерный массив с двумя элементами может быть представлен как:
Тогда размерный массив 2x2 может быть:
Трехмерный массив 2x2x2 может быть:
Вы можете надеяться увидеть, куда это идет. Четыре измерения могут быть:
источник
int a[2][2][2];
3-мерный массив.Вам не нужно представлять в больших пространственных измерениях, просто думайте об этом как лист папоротника.
Главный стебель - это ваш первый массив, где каждая ветвь является элементом, который он хранит. Если мы посмотрим на ветку, это ваше второе измерение. Он имеет похожую структуру небольших ветвей, представляющих его данные. Они, в свою очередь, имеют свои собственные небольшие ветви, которые продолжаются до тех пор, пока мы не доберемся до крошечных листьев, представляющих данные самого внутреннего или самого высокого размерного массива.
Вы можете увидеть это построение, если объявите каждый уровень своим именем. Здесь я повторно использую каждый переменный уровень, чтобы минимизировать код:
источник
Измерения - это то, чем вы хотите быть, 4-е измерение не обязательно должно быть временем. Если вы думаете о трех измерениях как о кубе, вы можете думать о четырех измерениях как о ряду кубов. 5 размеров, сетка из кубиков и тд.
Вы также можете иметь 3d коллекцию вокселей, с 4-м измерением, являющимся цветом, или плотностью, или некоторым другим свойством.
Когда вы выделяете память для вашего многомерного массива, он просто просто выделяет произведение каждого измерения максимально для вашего типа данных. Если у вас есть трехмерный массив или «куб» из 10 элементов в каждом измерении, вам будет выделено 1000 элементов. Если вы сделаете этот массив 4d с 10 элементами в 4-м измерении, компьютер просто выделит 10000. Увеличьте его до 5 измерений, и он выделит 100 000.
Компьютер не заботится о каком-либо значении того, что представляет каждое измерение. Чтобы выбрать, где в списке элементов находится одна точка, просто умножьте, чтобы выбрать адрес памяти.
источник
Представьте себе, что вы проводите НИОКР на каком-то новом медицинском устройстве, серии датчиков, которые вы надеваете на руки пациента. У вас есть семь добровольцев, выстроенных в очередь для тестирования. Каждый датчик сообщает о низкочастотных, среднечастотных и высокочастотных показаниях, которые вы принимаете каждые 100 мс в течение минуты.
Как сохранить все эти данные в памяти для анализа и построения графиков?
Массив, очевидно. Это выглядело бы так (с использованием готового универсального псевдокода):
Это пятимерный массив, и в этом нет ничего хитрого, таинственного или сбивающего с толку. Нет причин пытаться связать его с 5-мерным евклидовым пространством. Чтобы получить любое значение данных, мы используем выражение
Это как запрос к реляционной базе данных, в которой у вас есть запись для каждого значения данных: пять столбцов содержат идентификатор пациента, идентификатор датчика и т. Д., А также столбец со значением. Чтобы получить одну точку данных, вы используете пять терминов в WHERE: значение SELECT FROM SensorData WHERE (patientid = 6) и (sensorid = 5) и (arm = "left") и (channel = "midfreq") и (sampleindex = 338 ).
В таблице базы данных с пятью или более столбцами нет ничего мистического, не так ли?
(Я использую индексирование на основе 1, хотя в реальной жизни 0-основание встречается гораздо чаще.)
Обратите внимание, что я плохой мальчик из-за жесткого кодирования количества рук. Если мне когда-нибудь дадут финансирование на исследование этих датчиков на осьминоге, у меня проблемы!
источник
Массив - это только блок непрерывной памяти. Адресация памяти является одномерной, вы можете идти вперед или назад. Итак, если у вас есть массив с 5 элементами, 5 блоков памяти будут зарезервированы. Если у вас есть двумерный массив с 5 элементами в каждом измерении, 25 блоков памяти будут зарезервированы.
источник
Ну, на самом деле математики никогда (или, по крайней мере, обычно) не связывают четвертое измерение с чем-то вроде времени. Также они не будут ассоциировать первые три с чем-то вроде пространства: математики просто определяют измерение как абстрактное свойство, как правило, векторного пространства (часто это обобщается на многообразия или даже метрические пространства ). И это абстрактное определение не заботится о том, сколько измерений имеет физическое пространство, в которое мы попадаем. Концепция измерений применима к пространствам, которые даже не похожи на физическое пространство. На самом деле математики (и действительно физики) очень часто используют бесконечномерный пространства, такие как гильбертовы пространства квантовой механики.
С этим пояснением давайте поговорим о массивах - вам не нужно понимать векторные пространства, поскольку абстрактное определение здесь на самом деле намного проще.
( ℓ 0 × ℓ 1 × ℓ 2 × ... × ℓ п -1 ) -sized массив (т.е. размерности п ) просто сборник л 0 ⋅ л 1 ⋅ ... ⋅ ℓ п -1 числа ( или любой тип объекта заполняет массив). Единственное отличие от одномерного массива такой длины состоит в том, что у вас есть особый полезный способ индексации размеров отдельно, а именно
i lin = i n − 1 + ℓ n − 1 ⋅ ( i n −2 + ℓ n − 1 ⋅ (... ℓ 2 ⋅ ( i 1 + ℓ 1 ⋅ i 0 ) ...))
источник
imshow
в Python) - оно может показывать два пространственных измерения, а также третье измерение цвета.В программировании массивы довольно легко реализовать, но, возможно, не понять.
Как правило, каждый уровень массивов означает, что его содержание
n
складывается. Это означаетint x[4]
4 блока, каждый из которых содержитint
.int x[5][4]
5 блоков, каждый из которых содержитint[4]
.int x[3][5][4]
3 блока, каждый из которых содержитint[5][4]
.int x[2][3][5][4]
2 блока, каждый из которых содержитint[3][5][4]
.Как вы относитесь к ним, зависит от вас, но для лучшего понимания у вас есть что-то вроде
COLUMN
за последнийROW
для второго по последнемуPAGE
за третий последнийДо этого я где-то читал. Чтобы остаться здесь, мы можем также определить
BOOK
за четвертый последнийSHELF
для пятого последнего. (Или, если хотите,SHELFROW
чтобы мы могли продолжить.)Тем не менее, я никогда не видел массив с более чем 4 или, может быть, 5 измерениями в «дикой жизни».
Таким образом, вы можете определить и представить
int x[6][2][3][5][4]
себе набор из 6 «полок», каждая из которых имеет 2 книги, каждая из которых имеет 3 страницы, каждая имеет 5 строк, каждая из которых имеет 4 столбца.источник
Думайте об одномерном массиве как о комоде:
Каждый ящик является индексом массива. Вы можете поместить все, что вы хотите, в каждый ящик, и для многих целей каждый ящик будет содержать только один элемент (это одномерный массив).
Этот комод магический, поэтому он не ограничен физическим пространством. Это означает, что вы можете положить еще один комод в каждый ящик первого комода. Внутренние комоды могут содержать все, что вы хотите. Это двумерный массив.
Таким образом, вы можете сказать что-то вроде: «откройте верхний ящик первого комода, достаньте комод из этого ящика, затем откройте нижний ящик этого второго комода». Это было бы похоже на доступ к индексу двумерного массива: myArray [0] [3];
И, конечно же, комоды внутри самого внешнего комода могут сами содержать комоды. Это трехмерный массив.
Итак, ваш вопрос: что такое четырехмерный массив? Это комод комодов, комодов комодов, комодов, конечно!
Это ящики полностью вниз.
источник
myArray[0][3]
него будетmyArray[0][2]
. Но в остальном хорошее объяснение.Большинство аспектов этого вопроса уже были рассмотрены, но я думаю, что это поможет, если вы рассмотрите природу измерения. Не все измерения пространственные. Измерение - это контекст для измерения. Вот некоторые примеры:
«Четвертое» измерение - только четвертое, потому что есть три пространственных измерения. Пространство и время кажутся большими, потому что, ну, они кажутся большими. Очень сильно в твоем лице. Но любое измеряемое, измеримое качество может быть измерением, если вы его измеряете.
Например, бюстгальтеры имеют три измерения: размер чашки, размер груди и междоузлия (я не знаю, как вы, девочки, называете это, но я имею в виду расстояние между чашками).
источник
В физике мы предполагаем, что каждое пространственное измерение бесконечно, что затрудняет поиск пространства для новых измерений.
Имея дело с конечными массивами, легко найти место.
Представьте себе лист бумаги с напечатанной на нем сеткой; Вы можете написать некоторую информацию в каждой ячейке сетки. Это 2D массив: строка и столбец.
Поместите несколько из этих листов бумаги в папку с файлами; это трехмерный массив: страница, строка и столбец.
Поместите несколько из этих папок в поле файла. 4D массив: папка, страница, строка, столбец.
Расставьте ящики в прямоугольной сетке на деревянном поддоне. 6D массив: box-row, box-column, папка, страница, строка, столбец.
Сложите больше сеток коробок сверху тех. 7D массив: глубина коробки, коробка-строка, коробка-столбец, папка, страница, строка, столбец.
Начните складывать поддоны в транспортировочный контейнер: массив 9D. (Предполагая, что каждая пачка имеет такую же высоту, как и внутренняя часть контейнера, вы можете получить здесь только 2 измерения.)
Сложите транспортные контейнеры на палубу контейнеровоза: массив 12D.
Ваш флот контейнеровозов теперь является массивом 13D.
источник
В декартовой системе координат у вас есть оси X и Y на плоскости. Вы можете представить любое число на плоскости как (x, y).
В трехпространстве (иначе называемом кубом) вы можете иметь оси x, y и z. Вы можете представить любой элемент куба как (x, y, z).
В многомерном пространстве вы можете иметь оси x, y, z и, w (где ось w является «мнимой»). Вы можете представить любой элемент этого пространства как (x, y, z, w).
Все эти точки в пространстве обозначены векторами. В четырехмерном пространстве вы можете иметь два вектора, где v1 = (x1, y1, z1, w1) и v2 = (x2, y2, z2, w2). Затем вы управляете этими векторами, как числами. Например, сумма двух векторов, v1 + v2 будет (x1, y1, z1, w1) + (x2, y2, z2, w2). Затем вы добавляете эти векторы по порядку, как числа, чтобы получить: (x1 + x2, y1 + y2, z1 + z2, w1 + w2).
Ваша программа определит векторы, используя соответствующие массивы, а затем выполнит арифметические операции с ними в соответствующем порядке.
источник