C # / C ++: Как визуализировать мучимерные массивы

StackOverflow https://stackoverflow.com/questions/4221055

  •  26-09-2019
  •  | 
  •  

Вопрос

Например: двумерный массив может быть визуализирован как кирпичная стена с квадратными кирпичами, где каждый кирпич представляет собой координату в нашем массиве. 3-мерный массив такой же может быть визуализирован как коробка или куб.

Но вот сложная часть, как вы визуализируете массив с несколькими (более 3) размерами? Или для этой части, как вы визуализируете массив с не только несколькими размерами, но несколько размеров в нескольких слоях?

Например: как вы визуализируете массив, такой как этот: массив [3,3,3,3] [3,3] [3,3,3,3,3] [3]?

Это было полезно?

Решение

Как вы визуализируете, что массивы действительно зависит от их практического использования. Если вы используете массивы для космических отношений, вы можете воспользоваться вообразованием его в качестве куба, но вы также теряете необходимость представить более 3 измерений. Если вы действительно и действительно хотели осуществить четвертое разум времени, вы можете просто представить свой куб с изменением содержимого как прогрессирует время.

В противном случае вы можете отслеживать сильно связанные записи. Возможно, каждый из первых элементов является галактикой, элементы второго уровня являются звездными кластерами, элементы третьего уровня являются солнечными системами, элементы четвертого уровня являются планетами, элементы пятого уровня - это континеры ...

В этом случае вы можете представить, что это были массивы в массивах. Если вам нужен 4-мерный массив, вы можете представить кубик, но каждый подкубу на самом деле является одномерным массивом.

Если вам нужен 5-мерный массив, вы можете представить кубик, но каждый подкубу делится на пример «кирпичной стены».

6-мерный - это куб с каждым подваром, являющимся его собственным разделенным кубиком.

Это имеет тенденцию распадаться после 6 измерений. Помимо этого, как правило, более практическая причина, по которой вам нужно так много измерений. Например, веб-сайты, такие как Eharmony, делают их матча, используя нормальную геометрию на 20+ -мерных пространствах. У вас есть одно измерение для «юмора», один для «хорошей внешности», один для «любви к магазинам» ... Затем вы можете взять два человека и применить формулу расстояния (квадрат каждая из размеров различий, добавляет эти различия, квадратный корень ) И определите, насколько совместимыми двумя людьми. Так что, если один человек забил «5, 3, 9, 2, 8, 4, 7, 3, 1» на нашей 9-мерной матрице личности и еще один забил «9, 3, 7, 1, 8, 2, 8, 4 7 "Тогда ваша совместимость:

sqrt((5-9)^2+(3-3)^2+(9-7)^2+...)

Это может быть применено по бесконечным размерам и все еще работать. Поскольку эти размеры не применяются к пространству, однако нет необходимости визуализировать их как таковые. Вместо этого, в этом конкретном случае мы можем представить это как просто одномерное массив с несколькими целочисленными значениями. Причина, по которой мы можем упростить этот массив, разум вас, состоит в том, что наш многомерный массив содержит только один «1», и все остальные являются «0» (указывающие местоположение человека в этом массиве).

Переезд вдали от примера Eharmony, точка - после определенного количества измерений, которые вы обычно имеете практическую цель для массива, который поддается этому способу восприятия его.

Другие советы

Некоторые люди могут мысленно моделировать N-мерную геометрию для N> 3, по крайней мере, насколько простые фигуры и некоторые не могут. (Я был довольно удивлен, когда недавно разговаривал с кем-то, чье поле была усовершенствована N-мерной геометрией, чтобы узнать, что он не сможет визуализировать гиперкуб, в то время как я могу, но находить его математику.

На самом деле это на самом деле не нужно. Действительно, редко редко бывает необходимым визуализировать двумерный массив в качестве картезианских кординатов - когда вы используете двумерный массив на практике, у вас есть какая-то цель для каждой оси, и эта цель быстро становится важнее, чем любое визуальное представление.

Если вам нужно, то считайте, что двумерный массив также можно рассматривать как упорядоченный набор из 1-мерных структур. Точно так же 3-мерный массив можно рассматривать упорядоченный набор двумерных структур, или набор наборов 1-мерных (с этими наборами равного размера - позволяя различным размерам перемещать вопросы в зазубренные массивы).

Следовательно, 4-мерный массив можно считать упорядоченным набором трехмерных структур и так далее.

Вы не делаете. Редко, что вам даже нужно более 2 или 3 измерения. Если вам нужно больше, то, возможно, возможно, дополнительные размеры должны быть смоделированы как свойства на объекте вместо этого, в этом случае вы можете увидеть их как атрибуты и не пытаться представить себе немного мифического гиперкуба.

Попробуйте быть вычитанием по этому поводу. Если вам нужно представить, скажем, десять размерных массив затем начинается с воображения множества всех n-мерных реальных евклидовых векторных пространств для всех конечных неотрицательных целых чисел n. {R0, R1, R2, ...}

Теперь представьте, что забрать почти все это, оставив всего R10.

Теперь представьте, что убирают почти все это, так что у вас есть только целочисленные баллы решетки в R10.

Теперь представьте, что убирают почти все это, чтобы у вас было только гипер прямоугольное подмножество целочисленных баллов решетки.

И вы сделали; Это хорошая визуализация 10-мерного массива. Это действительно очень мало, когда вы думаете об этом как подмножество набора всех возможных n-мерных векторных пространств.

Если субъект высокогомерных пространств вас интересует вас, вы можете захотеть прочитать мое нежное введение к некоторым интересным фактам о алгоритмах поиска на многомерных векторных базах данных:

http://blogs.msdn.com/b/ericlippert/archive/tags/high+dimensional+spaces/

Есть много прекрасных способов визуализации многомерных данных. Один из моих любимых - Альфред Инсульберг Параллельные координаты, который представляет каждое измерение в качестве вертикальной оси, а каждую точку данных в качестве потока, соединяющей их все:

alt text

Еще одна великая визуализация - Рамана Рао Настольная линза (PDF):

alt text

Это представляет каждое измерение в качестве колонны, как в таблице, но графически, а не численно. Это особенно хорошо, показывая корреляцию между размерами; Как вы сортируете по одному измерению, легко увидеть, как коррелированные размеры портируют наряду с ним.

Более 3 измерений, ваши единственные варианты являются видом на дереву, либо сверла.

Так же, как вы визуализировать 4 пространственных размеров: «Ломтик», наложенного или проецируйте его на то, что вы уже понимаете и можете визуализировать.

Подумайте о каждом дополнительном измерении как «ограбление». Думайте о массиве 2D в качестве массива 1D-массивов, 3D-массива в качестве массива 2D-массивов и так далее.

Вот несколько примеров...

1D 1x2 массив:

[ 1, 2 ]

2D 2x2 массив:

{ [ 1, 2 ], [ 3, 4 ] }
{ [ 5, 6 ], [ 7, 8 ] }

3D 2x2x2 Массив:

( { [ 1, 2 ], [ 3, 4 ] }, { [ 5, 6 ], [ 7, 8 ] } )
( { [ 9, 0 ], [ 1, 2 ] }, { [ 3, 4 ], [ 5, 6 ] } )

Вы можете визуализировать финансовый отчет в качестве массива, когда данные попадают из нескольких объектов в форме электронных таблиц:

  • Единая электронная таблица данных продаж будет 2D-массивом (например, продажи на каждый месяц в квартале на центр прибыли);
  • Несколько вкладок в рабочей книге (одна для каждой дочерней компании) будет 3D-массивом;

Затем для целей глобальной консолидации контроллер может получить рабочую книгу из каждого региона - это будет 4-я измерение. Пятое измерение может быть «временем», если вам необходимо с течением времени необходимости манипулировать данными о продажах (например, для определения тенденций).

Теоретически, вы можете проводить многолетние, многоэкономические данные продаж в одной переменной 5D массива.

Когда люди сказали выше, вам действительно нужно сначала иметь в виду приложение, а затем структура логических данных поможет определить подходящую физическую форму. Любой набор атрибутов, которые могут быть смоделированы реляционно, могут быть размещены в массиве нормально.

Тони

Визуализируйте 4D массив в виде 1D-массива кубов. 5D Array в качестве 2D-массива кубов. И 6D массив в качестве 3D-массива кубиков или кубика кубов. 7D массив как 1D массив кубов кубов кубов и т. Д. ...

Игнорирование того, нуждаются ли эти размеры, почему бы не просто предусмотреть 4D массив в качестве 1D массива (строка) «кубиков». (т.е. 1D массив, где каждый элемент указывает на 3D CUBE). Это может быть расширено по мере необходимости (т. Е. 2D поверхность, где каждый элемент указывает на куб). Это, конечно, не так ли гиперкуб «выглядит», но это не требуется.

вкладки :)

Вкладки из трехмерных данных дают вам 4 измерения, вкладки вкладок дают вам n-мерную.

Не обязательно лучше всего визуализировать его. Также не хорошо для вращения в любом из измерений.

Но тогда это зависит от того, что вы пытаетесь визуализировать

RGB, например, можно превратить в 2D-карту, а затем проецируется на куб, давая вам 4D информацию

Не хочу отдавать ферму здесь, но это пример того, как я смотрю на многомерные массивы в PHP.

$ карта [комната] [x] [y] [z] [ID] [Photopath] [flag1] [flag2

Я представляю, что он выглядел как точка в 3D-пространстве, то я просто добавляю атрибуты сортировки. Здесь представьте, что вы играете в Doom 3. Каждая карта делится в комнаты, которые имеют пиксели с координатами x, y и z. Каждый из этих баллов может иметь идентификатор объекта (монстра, элемент и т. Д.), Связанный с ним. Я добавил больше атрибутов для моего приложения, но это в основном это. Точка в массиве не обязательно должна быть геометрически точна; это может иметь какое-либо значение. Как это похоже на то, что делают другие люди, я не знаю. Я знаю, что использование графической библиотеки GD сделает хороший визуализатор для многомерных массивов на лету, но я не добился этого проекта в прошлый раз, когда я работал на этом клиенте.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top