6.3.2 Создание массивов ячеек
Вводный пример (см. Основные сведения об использовании массивов ячеек) показал, как создать массив ячеек, содержащий доступные в данный момент переменные. Однако во многих ситуациях полезно сначала создать массив ячеек, а затем заполнить его данными.
Функция cell возвращает массив ячеек заданного размера, содержащий пустые матрицы. Эта функция аналогична функции zeros для создания новых числовых массивов. В следующем примере создаётся массив ячеек размером 2 на 2, содержащий пустые матрицы
c = cell (2,2)
⇒ c =
{
[1,1] = [](0x0)
[2,1] = [](0x0)
[1,2] = [](0x0)
[2,2] = [](0x0)
} Как и числовые массивы, массивы ячеек могут быть многомерными. Функция cell принимает любое количество положительных целых чисел, задающих размер возвращаемого массива ячеек. Размер массива ячеек также можно задать с помощью вектора положительных целых чисел. В следующем примере создаются два массива ячеек одинакового размера и выводится размер первого из них
c1 = cell (3, 4, 5);
c2 = cell ( [3, 4, 5] );
size (c1)
⇒ ans =
3 4 5 Как видно, функция size работает и с массивами ячеек. То же относится и к другим функциям, описывающим размер объекта, таким как length, numel, rows и columns.
-
:
C =cell(n) -
:
C =cell(m, n) -
:
C =cell(m, n, k, …) -
:
C =cell([m n …]) -
Создаёт новый объект — массив ячеек.
Если передан один скалярный целочисленный аргумент, возвращает квадратный массив ячеек размера NxN. Если переданы два или более скалярных целочисленных аргумента либо вектор целочисленных значений, возвращает массив заданной размерности.
См. также: cellstr, mat2cell, num2cell, struct2cell.
Вместо создания пустых массивов ячеек с последующим заполнением можно преобразовать числовые массивы в массивы ячеек с помощью функций num2cell, mat2cell и cellslices.
-
:
C =num2cell(A) -
:
C =num2cell(A, dim) -
Преобразует числовую матрицу A в массив ячеек.
Если параметр dim не задан, каждый элемент A становится элементом размером 1x1 в выходном массиве C.
Если задан параметр dim, отдельные элементы C содержат все элементы A вдоль указанного измерения. Параметр dim также может быть вектором измерений; в этом случае применяется то же правило.
Например:
x = [1,2;3,4] ⇒ 1 2 3 4 ## each element of A becomes a 1x1 element of C num2cell (x) ⇒ { [1,1] = 1 [2,1] = 3 [1,2] = 2 [2,2] = 4 } ## all rows (dim 1) of A appear in each element of C num2cell (x, 1) ⇒ { [1,1] = 1 3 [1,2] = 2 4 } ## all columns (dim 2) of A appear in each element of C num2cell (x, 2) ⇒ { [1,1] = 1 2 [2,1] = 3 4 } ## all rows and cols appear in each element of C ## (hence, only 1 output) num2cell (x, [1, 2]) ⇒ { [1,1] = 1 2 3 4 }См. также: mat2cell.
-
:
C =mat2cell(A, dim1, dim2, …, dimi, …, dimn) -
:
C =mat2cell(A, rowdim) -
Преобразует матрицу A в массив ячеек C.
Каждый аргумент измерения (dim1, dim2 и т. д.) представляет собой вектор целых чисел, задающий, как разделить элементы соответствующего измерения между новыми элементами выходного массива C. Число элементов в измерении i равно
size (A, i). Поскольку все элементы A должны быть распределены по разделам, необходимо, чтобыsum (dimi) == size (A, i). Размер выходного массива ячеек C равен numel (dim1) x numel (dim2) x … x numel (dimn).Если задан только один аргумент измерения — rowdim, — выходной массив делится на строки указанным образом. Все остальные измерения не разделяются, поэтому все столбцы (измерение 2), страницы (измерение 3) и т. д. включаются в каждый выходной элемент.
Примеры
x = reshape (1:12, [3, 4])' ⇒ 1 2 3 4 5 6 7 8 9 10 11 12 ## The 4 rows (dim1) are divided in to two cell elements ## with 2 rows each. ## The 3 cols (dim2) are divided in to three cell elements ## with 1 col each. mat2cell (x, [2,2], [1,1,1]) ⇒ { [1,1] = 1 4 [2,1] = 7 10 [1,2] = 2 5 [2,2] = 8 11 [1,3] = 3 6 [2,3] = 9 12 } ## The 4 rows (dim1) are divided in to two cell elements ## with a 3/1 split. ## All columns appear in each output element. mat2cell (x, [3,1]) ⇒ { [1,1] = 1 2 3 4 5 6 7 8 9 [2,1] = 10 11 12 }
-
:
sl =cellslices(x, lb, ub, dim) -
Для заданного массива x эта функция формирует массив ячеек со срезами массива, определяемыми векторами индексов lb и ub, задающими соответственно нижние и верхние границы.
Иными словами, она эквивалентна следующему коду:
n = length (lb); sl = cell (1, n); for i = 1:length (lb) sl{i} = x(:,...,lb(i):ub(i),...,:); endforПоложение индекса определяется параметром dim. Если он не задан, срезы выполняются вдоль первого измерения, размер которого не равен единице.
См. также: cell2mat, cellindexmat, 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/Creating-Cell-Arrays.html