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 выходных аргументов для каждой размерности матрицы. Этот пример показывает различные результаты, когда вы возвращаете меньше выходных аргументов для трехмерного массива.

Создайте входные параметры, должен был преобразовать линейные индексы 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