Синтаксис массива ячеек - PullRequest
       3

Синтаксис массива ячеек

3 голосов
/ 24 февраля 2011

Два вопроса:

1) Я нашел фрагмент кода, который говорит что-то вроде cellArr{x}{y}{3,8} = 1.0;, мне было интересно, что означает {3,8}. Программа соединяет различные узлы в коллекции связанных графов вместе. Здесь мы бы сказали, что «в наборе графов x соединение графа y от 3 до 8 имеет метку вершины 1.0». Тем не менее, в целом, что означает синтаксис {3,8} в MatLab?

2) Это, вероятно, не место для этого вопроса, но я должен действительно использовать массивы ячеек, если я знаю, что у меня всегда будут значения вершин, то есть десятичные числа / числа с плавающей точкой. Будет ли матрица лучше, потому что я знаю, что у меня будет только один тип данных?

Спасибо:).

Ответы [ 2 ]

4 голосов
/ 24 февраля 2011
  1. Массивы ячеек могут иметь несколько измерений, и поэтому они могут быть проиндексированы с несколькими индексами, как и любой другой многомерный массив . Синтаксис {3,8} индексирует (предположительно) массив двумерных ячеек, получая содержимое ячейки в третьей строке и восьмом столбце.

  2. Существует две основные причины использования массивов ячеек: хранение данных разных типов или хранение данных разных размеров . Предполагая, что x и y являются скалярными индексами в вашем примере, тогда cellArr - это массив ячеек с ячейкой, индексированной x, содержащей другой массив ячеек, чья ячейка с индексом y содержит двумерный массив ячеек где хранятся ваши метки вершин.

    Теперь, если все ваши метки вершин имеют один и тот же тип данных и - это всего лишь единичные непустые (т.е. не []) значения, тогда двумерная ячейка Массив на самом низком уровне можно превратить в двумерный числовой массив, и ваша индексация будет выглядеть так:

    cellArr{x}{y}(3,8) = 1.0;  %# Note the use of () instead of {}
    

    Теперь возникает вопрос, как обращаться с двумя вмещающими наборами массивов ячеек, индексированных x и y. Если каждая ячейка, которая может быть проиндексирована с помощью y, содержит двумерные числовые массивы одинакового размера и типа , то этот массив ячеек можно превратить в трехмерный числовой массив, который можно индексировать как так:

    cellArr{x}(3,8,y) = 1.0;  %# Here I've chosen to use y as the third dimension
    

    Наконец, если каждая ячейка, которая может быть проиндексирована с помощью x, содержит трехмерные числовые массивы, которые снова имеют одинакового размера и типа , тогда cellArr можно превратить в 4- Числовой массив D, который можно индексировать следующим образом:

    numArr(3,8,y,x) = 1.0;
    

    Вы можете изменить порядок индексов (т. Е. Размеры numArr) по своему вкусу, но я поставлю x и y в конце, чтобы при индексировании подмассива меток вершин, например, numArr(:,:,y,x) он вернет его как двумерный массив. Если бы вы упорядочили индексы таким образом, чтобы индексировать подмассив меток вершин, например numArr(x,y,:,:), он вернет результат в виде 4-D массива с единицами для двух ведущих одноэлементных измерений (которые вы должны удалить, используя такие функции, как SQUEEZE ).

4 голосов
/ 24 февраля 2011
  1. Синтаксис {3,8} является индексами массива ячеек так же, как {x} и {y}.Таким образом, cellArr является клеточным вектором клеточных векторов.Один из этих клеточных векторов индексируется {x}.Этот вектор ячеек сам по себе является вектором 2d-матриц ячеек, который индексируется {y}.Наконец, эта матрица ячеек индексируется как {3,8}, то есть 3-я строка и 8-й столбец.
  2. Если все ваши данные являются числовыми, вам будет гораздо лучше использовать 4-мерный массив.Для вашего примера этот массив будет проиндексирован как numericArray[x, y, 3, 8].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...