6.3.3 Индексация массивов ячеек
Как показано в разделе Основное использование массивов ячеек, элементы можно извлекать из массивов ячеек с помощью операторов ‘{’ и ‘}’. Если необходимо извлечь или получить доступ к подмассивам, которые сами являются массивами ячеек, нужно использовать операторы ‘(’ и ‘)’. Следующий пример показывает разницу:
c = {"1", "2", "3"; "x", "y", "z"; "4", "5", "6"};
c{2,3}
⇒ ans = z
c(2,3)
⇒ ans =
{
[1,1] = z
} Таким образом, с помощью ‘{}’ обращаются к элементам массива ячеек, а с помощью ‘()’ — к подмассиву массива ячеек.
При использовании операторов ‘(’ и ‘)’ индексация массивов ячеек работает так же, как индексация многомерных массивов. Например, все строки первого и третьего столбцов массива ячеек можно присвоить 0 следующей командой:
c(:, [1, 3]) = {0}
⇒ =
{
[1,1] = 0
[2,1] = 0
[3,1] = 0
[1,2] = 2
[2,2] = y
[3,2] = 5
[1,3] = 0
[2,3] = 0
[3,3] = 0
} Обратите внимание, что приведённого выше результата можно также добиться следующим образом:
c(:, [1, 3]) = 0;
Здесь скаляр ‘0’ автоматически преобразуется в массив ячеек ‘{0}’, а затем присваивается подмассиву c.
Ещё один пример индексации массивов ячеек с помощью ‘()’: можно поменять местами первую и вторую строки массива ячеек, выполнив следующую команду:
c = {1, 2, 3; 4, 5, 6};
c([1, 2], :) = c([2, 1], :)
⇒ =
{
[1,1] = 4
[2,1] = 1
[1,2] = 5
[2,2] = 2
[1,3] = 6
[2,3] = 3
} При обращении к нескольким элементам массива ячеек с помощью операторов ‘{’ и ‘}’ будет создан список значений, разделённых запятыми (см. Списки значений, разделённых запятыми). С помощью операторов ‘{’ и ‘}’ первые две строки в приведённом выше примере можно поменять обратно следующим образом:
[c{[1,2], :}] = deal (c{[2, 1], :})
⇒ =
{
[1,1] = 1
[2,1] = 4
[1,2] = 2
[2,2] = 5
[1,3] = 3
[2,3] = 6
} Как и в случае массивов структур и числовых массивов, для удаления элементов из массива ячеек можно использовать пустую матрицу ‘[]’:
x = {"1", "2"; "3", "4"};
x(1, :) = []
⇒ x =
{
[1,1] = 3
[1,2] = 4
} В следующем примере показано, как удалить только содержимое элементов массива ячеек, не освобождая занимаемое ими место:
x = {"1", "2"; "3", "4"};
x(1, :) = {[]}
⇒ x =
{
[1,1] = [](0x0)
[2,1] = 3
[1,2] = [](0x0)
[2,2] = 4
} Операции индексации выполняются над массивом ячеек, а не над объектами внутри него. В отличие от этого, cellindexmat применяет матричную индексацию к объектам в каждой ячейке и возвращает запрошенные значения.
-
:
y =cellindexmat(x, varargin) -
Выполняет индексацию матриц в массиве ячеек.
Для заданного массива ячеек матриц x эта функция вычисляет
Y = cell (size (X)); for i = 1:numel (X) Y{i} = X{i}(varargin{1}, varargin{2}, ..., varargin{N}); endforАргументы индексации могут быть скалярами (
2), массивами ([1, 3]), диапазонами (1:3) или оператором двоеточия (":"). Однако ключевое слово индексацииendнедоступно.См. также: cellslices, cellfun.
© 1996–2026 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.4.0/Indexing-Cell-Arrays.html