ind2sub

Преобразуйте линейные индексы в индексы

Описание

пример

[row,col] = ind2sub(sz,ind) возвращает массивы row и col содержа эквивалентные индексы строки и столбца, соответствующие линейным индексам ind для матрицы размера sz. Здесь sz вектор с двумя элементами, где sz(1) задает количество строк и sz(2) задает количество столбцов.

пример

[I1,I2,...,In] = ind2sub(sz,ind) возвращает n массивы I1,I2,...,In содержа эквивалентные многомерные индексы, соответствующие линейным индексам ind для многомерного массива размера sz. Здесь sz вектор с n элементы, который задает размер каждого измерения массива.

Примеры

свернуть все

Преобразуйте линейные индексы [3 4 5 6] к индексам строки и столбца в 3х3 матрице. Отображение от линейных индексов до индексов (индексирующий положением) проиллюстрировано в следующем.

Создайте входные векторы и выполните преобразование.

ind = [3 4 5 6];
sz = [3 3];
[row,col] = ind2sub(sz,ind)
row = 1×4

     3     1     2     3

col = 1×4

     1     2     2     2

Преобразуйте линейные индексы [3 4 5 6] к индексам в 2 массивом 2 на 2. Отображение от линейных индексов до индексов (индексирующий положением) для 2 массивом 2 на 2 может быть проиллюстрировано как в следующем.

Создайте входные векторы и выполните преобразование.

ind = [3 4 5 6];
sz = [2 2 2];
[I1,I2,I3] = ind2sub(sz,ind)
I1 = 1×4

     1     2     1     2

I2 = 1×4

     2     2     1     1

I3 = 1×4

     1     1     2     2

Преобразуйте линейный индекс трехмерного массива в индекс индекса.

Создайте массив и найдите индекс индекса, соответствующий 14-му элементу массива.

A = rand(3,4,2);
[row,col,page] = ind2sub(size(A),14)
row = 2
col = 1
page = 2

Проверяйте, что обе версии индекса обращаются к тому же элементу массива.

A(14)
ans = 0.4854
A(row,col,page)
ans = 0.4854

При использовании ind2sub для N-мерного массива вы обычно предоставляли бы выходные аргументы N в пользу каждой размерности матрицы. Этот пример показывает различные результаты, когда вы возвращаете меньше выходных аргументов в пользу 3-мерного массива.

Создайте входные параметры, должен был преобразовать линейные индексы 1 - 8 для 3-мерного массива с размером 2 2 на 2.

ind = 1:8;
sz = [2 2 2];

Задайте три выходных аргумента при использовании ind2sub возвратить строку, столбец и индексы страницы для 2 массивом 2 на 2.

[row,col,page] = ind2sub(sz,ind)
row = 1×8

     1     2     1     2     1     2     1     2

col = 1×8

     1     1     2     2     1     1     2     2

page = 1×8

     1     1     1     1     2     2     2     2

Если вы задаете только два выходных аргумента, ind2sub игнорирует третью размерность массива и возвращает индексы для 2-мерного массива с размером 2 4 вместо этого.

[row,col] = ind2sub(sz,ind)
row = 1×8

     1     2     1     2     1     2     1     2

col = 1×8

     1     1     2     2     3     3     4     4

Если вы задаете только один выходной аргумент, ind2sub игнорирует вторые и третьи размерности массива и возвращает индексы для 1-мерного массива с размером 1 8 вместо этого.

row = ind2sub(sz,ind)
row = 1×8

     1     2     3     4     5     6     7     8

Входные параметры

свернуть все

Размер массива в виде вектора положительных целых чисел. Каждый элемент этого вектора указывает на размер соответствующей размерности. Например, [2 3 4] задает 2 массивом 3 на 4.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Линейные индексы в виде скаляра, вектора, матрицы или многомерного массива.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Выходные аргументы

свернуть все

Индексы строки, возвращенные как скаляр, вектор, матрица или многомерный массив. Размер row совпадает с размером входа ind.

Типы данных: double

Индексы столбца, возвращенные как скаляр, вектор, матрица или многомерный массив. Размер col совпадает с размером входа ind.

Типы данных: double

Многомерные индексы, возвращенные как скаляр, вектор, матрица или многомерный массив. Размер каждого массива I1,I2,…,In совпадает с размером входа ind.

Типы данных: double

Советы

  • Получить линейные индексы элементов матрицы, которые удовлетворяют особому условию для матричного A, можно использовать find функция с одним выходным аргументом. Чтобы получить индексы индекса, используйте find функция с двумя выходными аргументами. Например, [row,col] = ind2sub(size(A),find(A>5)) дает тот же результат как [row,col] = find(A>5).

Алгоритмы

Для массива A, если [I1,…,In] = ind2sub(size(A),ind), затем A(I1(k),…,In(k)) = A(ind(k)) для всего k.

Расширенные возможности

Представлено до R2006a