# ind2sub


将线性索引转换为下标

# 语法

row,col = ind2sub(sz,ind)
I1,I2,...,In = ind2sub(sz,ind;nargout = length(sz))

# 说明

row,col = ind2sub(sz,ind) 返回数组 row 和 col,其中包含与大小为 sz 的矩阵的线性索引 ind 对应的等效行和列下标。此处,sz 是包含两个元素的向量,其中 sz[1]指定行数,sz[2]指定列数。示例


I1,I2,... = ind2sub(sz,ind,nargout = length(sz)) 默认返回长度等于 sz 长度个数组 I1,I2...,其中包含与大小为 sz 的多维数组的线性索引 ind 对应的等效多维下标。此处,sz 是包含 n 个元素的向量,用于指定每个数组维度的大小。示例

# 示例

将矩阵的线性索引转换为下标

将 3×3 矩阵的线性索引 [3 4 5 6] 转换为行和列下标。从线性索引到下标(按位置进行索引)的映射如下所示。

创建输入向量并执行转换。

using TyBase
ind = [3 4 5 6]
sz = [3 3]
row,col = ind2sub(sz,ind)
row = 1×4 Matrix{Int64}:
 3  1  2  3

col = 1×4 Matrix{Int64}:
 1  2  2  2
将线性索引转换为三维数组的下标

将 2×2×2 数组的线性索引 [3 4 5 6] 转换为下标。2×2×2 数组中从线性索引到下标(按位置进行索引)的映射如下所示。

创建输入向量并执行转换。

using TyBase
ind = [3 4 5 6]
sz = [2 2 2]
I1,I2,I3 = ind2sub(sz,ind)
I1 = 1×4 Matrix{Int64}:
 1  2  1  2

I2 = 1×4 Matrix{Int64}:
 2  2  1  1

I3 = 1×4 Matrix{Int64}:
 1  1  2  2
访问三维数组的元素

将三维数组的线性索引转换为下标索引。

创建一个数组,并找到对应于该数组的第 14 个元素的下标索引。

using TyBase
A = rand(3,4,2)
row,col,page = ind2sub(size(A),14)
row = 2
col = 1
page = 2

检查这两个索引版本是否引用数组的同一元素。

A[14]
ans = 0.53464676903697
A[row,col,page]
ans = 0.53464676903697
带较少输出参数使用 ind2sub

当对 N 维数组使用 ind2sub 时,通常会带 N 个输出参数,每个参数与矩阵的一个维度相对应。此示例说明当您带较少输出参数处理三维数组时的不同结果。

创建输入参数,用于对 2×2×2 三维数组的线性索引 1 到 8 进行转换。

using TyBase
ind = 1:8
sz = [2 2 2]

使用 ind2sub 时,默认三个输出参数,以返回 2×2×2 数组的行、列和页下标。

row,col,page = ind2sub(sz,ind)
row = 1×8 Matrix{Int64}:
1  2  1  2  1  2  1  2

col = 1×8 Matrix{Int64}:
1  1  2  2  1  1  2  2

page = 1×8 Matrix{Int64}:
1  1  1  1  2  2  2  2

如果您使用nargout参数只指定两个输出参数,ind2sub 将忽略数组的第三个维度,并返回 2×4 二维数组的下标。

row, col = ind2sub(sz, ind; nargout = 2)
row = 1×8 Matrix{Int64}:
1  2  1  2  1  2  1  2

col = 1×8 Matrix{Int64}:
1  1  2  2  3  3  4  4

如果您使用nargout参数只指定一个输出参数,ind2sub 将忽略数组的第二个和第三个维度,并返回 1×8 一维数组的下标。

row = ind2sub(sz, ind; nargout = 1)
row = 1×8 Matrix{Int64}:
1  2  3  4  5  6  7  8

# 输入参数

sz - 数组的大小

数组的大小,指定为正整数一维数组。其每个元素指示对应维度的大小。例如,[2 3 4] 定义 2×3×4 数组。

ind-线性索引
标量 | 向量 | 矩阵 | 多维数组

线性索引,指定为标量、向量、矩阵或多维数组。

# 输出参数

row - 行下标
标量 | 向量 | 矩阵 | 多维数组

行下标,以标量、向量、矩阵或多维数组的形式返回。row 的大小与输入 ind 的大小相同。

col - 列下标
标量 | 向量 | 矩阵 | 多维数组

列下标,以标量、向量、矩阵或多维数组的形式返回。col 的大小与输入 ind 的大小相同。

I1,I2,...,In - 多维下标
标量 | 向量 | 矩阵 | 多维数组

多维下标,以标量、向量、矩阵或多维数组的形式返回。每个数组的大小 I1,I2,…,In 与输入 ind 的大小相同。

# 算法

对于数组A,如果 I1,...,In = ind2sub(size(A),ind),则对于所有k来说,A[I1[k],...,In[k]] = A[ind[k]]

# 另请参阅

sub2ind