Matlab中ind2sub函数的使用

目录

语法

说明

示例

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

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

访问三维数组的元素

带较少输出参数使用ind2sub


        ind2sub函数的功能是将线性索引转换为下标。

语法

​[row,col] = ind2sub(sz,ind)
[I1,I2,...,In] = ind2sub(sz,ind)

提示

  • 要获得矩阵 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))。

说明

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

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

示例

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

        将 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值