ind2sub
将线性索引转换为下标
说明
示例
将矩阵的线性索引转换为下标
将 3×3 矩阵的线性索引 [3 4 5 6]
转换为行和列下标。从线性索引到下标(按位置进行索引)的映射如下所示。
创建输入向量并执行转换。
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
将线性索引转换为三维数组的下标
将 2×2×2 数组的线性索引 [3 4 5 6]
转换为下标。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 维数组使用 ind2sub
时,通常会带 N 个输出参数,每个参数与矩阵的一个维度相对应。此示例说明当您带较少输出参数处理三维数组时的不同结果。
创建输入参数,用于对 2×2×2 三维数组的线性索引 1 到 8 进行转换。
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×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×8 一维数组的下标。
row = ind2sub(sz,ind)
row = 1×8
1 2 3 4 5 6 7 8
输入参数
sz
— 数组的大小
正整数向量
数组的大小,指定为正整数向量。此向量的每个元素指示对应维度的大小。例如,[2 3 4]
定义 2×3×4 数组。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ind
— 线性索引
标量 | 向量 | 矩阵 | 多维数组
线性索引,指定为标量、向量、矩阵或多维数组。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
输出参数
row
— 行下标
标量 | 向量 | 矩阵 | 多维数组
行下标,以标量、向量、矩阵或多维数组的形式返回。row
的大小与输入 ind
的大小相同。
数据类型: double
col
— 列下标
标量 | 向量 | 矩阵 | 多维数组
列下标,以标量、向量、矩阵或多维数组的形式返回。col
的大小与输入 ind
的大小相同。
数据类型: double
I1,I2,...,In
— 多维下标
标量 | 向量 | 矩阵 | 多维数组
多维下标,以标量、向量、矩阵或多维数组的形式返回。每个数组的大小 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)
,则对于所有 k
来说,A(I1(k),…,In(k)) = A(ind(k))
。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
此函数完全支持 tall 数组。有关详细信息,请参阅 tall 数组。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
第一个参数必须为有效的大小向量。不支持超过
intmax
个元素的数组的大小向量。生成的代码将
NaN
输入视为超出范围,并引发运行时错误。请参阅Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder)。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅Run MATLAB Functions in Thread-Based Environment。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
此函数完全支持 GPU 数组。有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)