MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

MATLAB

В.Г.Потемкин "Введение в Matlab" (v 5.3)
Глава 5. Многомерные массивы

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

5.4. Команды и функции обработки многомерных массивов

CAT
Объединение массивов

Синтаксис:

         C = cat(dim, A, B)
         C = cat(dim, A1, A2, A3, A4 ...)

Описание:

Функция C = cat(dim, A, B) объединяет массивы A и B вдоль размерности dim.

Функция C = cat(dim, A1, A2, A3, A4 ?) объединяет множество исходных массивов Ai вдоль размерности dim.

При этом cat(1, A, B) равносильно массиву [A; B], объдиняемому вдоль строк; cat(2, A, B) равносильно массиву [A B], объдиняемому вдоль столбцов.

Функции вида cat(dim, A{:}) и cat(dim, A.<имя_поля>) задают объединение массива ячеек или массива записей, содержащего числовые матрицы, в некоторый многомерный массив.

Пример.
Пусть заданы два 2-мерных массива A и B:

A = A =
1 2 5 6
3 4 7 8

Выполним их объединение вдоль разных размерностей:

C = cat(1,A,B)

C = cat(2,A,B)

C = cat(3,A,B)

1 2
3 4
5 6
7 8
1 2 3 4
5 6 7 8
5 6
7 8
1 2
3 4

Последовательность операторов

             M = magic(3);
             P = pascal(3);
             C = cat(4, M, P)

создает следующий многомерный массив размера 3x3x1x2:

             С(:, :, 1, 1) =

8 1 6
3 5 7
4 9 2

             С(:, :, 1, 2) =

1 1 1
1 2 3
1 3 6

Объединяя массив M и массив P, дополненный единичным столбцом, в массив ячеек S,

            S = {M [P ones(size(P, 1), 1)]};
             for i=1:length(S),
                 siz{i} = size(S{i});
             end
             sizes = cat(1, siz{:})

можно сформировать 2-мерный массив sizes, элементами которого являются размеры входных массивов

             sizes =

3 3
3 4

Сопутствующие функции: NUM2CELL.

Переопределение метода: funfun\inline\cat.m

NDIMS
Количество размерностей многомерного массива

Синтаксис:

           n = ndims(A)

Описание:

Функция n = ndims(A) возвращает количество размерностей многомерного массива A, которое всегда больше или равно 2. Оконечные единичные размерности dim массива А, то есть такие размерности, для которых выполняется условие size(A, dim) = 1, во внимание не принимаются.

Алгоритм:

           ndims(X) = length(size(X))

Сопутствующие функции: SIZE.

NDGRID
Генерация сетки для многомерных функций и интерполяции

Синтаксис:

          [X1, X2, X3, ....] = ndgrid(x1, x2, x3,.....)
          [X1, X2, ?] = ndgrid(x)

Описание:

Функция [X1, X2, X3,.....] = ndgrid(x1, x2, x3,.....) преобразует области, заданные векторами x1, x2, x3,.... в массивы X1, X2, X3, ...., которые можно использовать в качестве сетки для вычисления функций нескольких переменных и многомерной интерполяции. При этом i-ая размерность выходного массива Xi повторяет элементы вектора xi.

Функция [X1, X2, ...] = ndgrid(x) равносильна функции [X1, X2, ...] = ndgrid(x, x, ...).

Пример.
Вычислить функцию от трех переменных   x2*exp(-x1^2-x2^2-x^3) на области  -2 < x1 < 2, -2 < x2 < 2, -2 < x3 < 2 и построить ее сечения, используя команду slice:

            [x1, x2, x3] = ndgrid(-2:.2:2, -2:.25:2, -2:.16:2);
            z = x2 .* exp(-x1.^2 - x2.^2 - x3.^2);
            slice(x2, x1, x3, z, [-1.2 .8 2], 2, [-2 -.2])

ndgrid.jpg (27545 bytes)

                                      Рис. 5.17

Замечание:

Функция ndgrid аналогична функции meshgrid, за исключением того, что первые два аргумента перставлены местами, то есть функция [X1, X2, X3] = ndgrid(x1, x2, x3) дает тот же результат, что и функция [X2, X1, X3] = meshgrid(x2, x1, x3).

В силу этого обстоятельства функция ndgrid лучше подходит для решения многомерных задач, в то время как функция meshgrid - для решения пространственных задач в 2-мерном и 3-мерном пространствах.

Сопутствующие функции: MESHGRID, INTERPN.

PERMUTE IPERMUTE
Прямая и обратная перестановки размерностей многомерного массива

Синтаксис:

              B = permute(A, <вектор перестановок>)
              A = ipermute(B, <вектор перестановок>)

Описание:

Функция B = permute(A, <вектор перестановок>) осуществляет перестановку размерностей многомерного массива A в соответствии с порядком, определенным вектором перестановок. Значения элементов массива остаются неизменными, но порядок размещения последних определяется вектором перестановок; в свою очередь, элементы вектора перестановок - это числа от 1 до N, переставленные соответствующим образом.

Функция A = ipermute(B, <вектор перестановок>) осуществляет обратную перестановку размерностей многомерного массива A в соответствии с порядком, определенным вектором перестановок.

Замечание:

Функции permute и ipermute обобщают операцию траспонирования (.') на случай многомерных массивов.

Пример

           A = rand(1,2,3,4);
            B = permute(A, [3 2 1 4]);
            size(B)

            ans = 3   2    1   4

Массив с переставленными размерностями имеет размер 3x2x1x4.

           C = ipermute(B, [3 2 1 4]);
            isequal(A, C)

            ans = 1

Таким образом, массивы С и A идентичны.

Сопутствующие функции: нет.

SHIFTDIM
Сдвиг размерностей многомерного массива

Синтаксис:

           B = shiftdim(X, n)
           [B, n] = shiftdim(X)

Описание:

Функция B = shiftdim(X, n) сдвигает n размерностей многомерного массива X; если n положительное число, выполняется сдвиг на n размерностей влево, а n первых размерностей подставляются в конец (круговая перестановка); если n отрицательное число, выполняется сдвиг на n размерностей вправо, а n первых размерностей дополняются единичными.

Функция [B, n] = shiftdim(X) возвращает с тем же количеством элементов, что и X, но с удаленными ведущими единичными размерностями; количество удаленных размерностей фиксируется переменной n.

Функция shiftdim удобна тем, что подобно функциям sum и diff, работает с первой неединичной размерностью.

Замечание:

Если X - скаляр, то функции shiftdim(X) не выполняется.

Пример

           A = rand(1, 1, 3, 1, 2);
           [B, n] = shiftdim(A)

           B(:, :, 1) =

0.3046
0.1897
0.1934

           B(:, :, 2) =

0.6822
0.3028
0.5417

             n =     2
             size(B)
             ans = 3    1   2

Массив B имеет размер 3x1x2 и n = 2.

             C = shiftdim(B, -n);
             isequal(A, C)

             ans =     1

Таким образом, массивы С и A идентичны.

             D = shiftdim(A, 3);
             size(D)

             ans = 1    2   1   1   3

Сопутствующие функции: RESHAPE, SQUEEZE.

SQUEEZE
Удаление всех единичных размерностей многомерного массива

Синтаксис:

           B = squeeze(A)

Описание:

Функция B = squeeze(A) возвращает массив B с теми же элементами, что и A, но в котором удалены размерности, равные 1.

Пример.
Рассмотрим 3-мерный массив A=rand(2, 1, 3) размера 2?1?3. Этот массив имеет размерность столбца, равную 1, то есть на каждой странице размещен один вектор-столбец:

            A = rand(2, 1, 3)
            A(:, :, 1) =

0.9218
0.7382

          A(:, :, 2) =

0.1763
0.4057

           A(:, :, 3) =

0.9355
0.9169

Применение функции squeeze превращает его в 2-мерный размера 2x3:

          squeeze(A)
          ans =

0.9218 0.1763 0.9355
0.7382 0.4057 0.9169

Сопутствующие функции: RESHAPE, SHIFTDIM.

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

 


Поиск по сайту:

Система Orphus

Яндекс.Метрика