Matlabwilliam hill官网
直播中

记帖MCU

1年用户 122经验值
擅长:嵌入式技术 控制/MCU RF/无线
私信 关注
[讨论]

MATLAB(3)--矩阵的引用(sub2ind、ind2sub、reshape函数使用)

矩阵元素的引用

  1. 通过下标来引用矩阵的元素。
    A(3,2)表示A矩阵第三行第二列的元素。只会改变A(3,2)元素的值,并不会改变其他的值。 如果给出的行下标或者列下标大于原来矩阵的行下标或者列下标,那么自动扩展原来的矩阵,并将扩展后没有赋值的矩阵元素置为0,示例如下所示:

  2. 通过下标来引用矩阵的元素。
    在MATLAB中,矩阵元素按列存储,即首先存储矩阵的第一列元素,然后存储第二列,……,一直到矩阵的最后一列元素。 矩阵元素的序号就是矩阵元素在内存中的排列顺序。

    例如下图中,创建了A的两行三列的元素,引用第三个元素:

    序号与下边是一一对应的,以m n矩阵A为例,矩阵元素A(i,j)的序号为(j-1) m+i。

    矩阵袁术的序号与下标可以利用sub2ind和ind2sub函数实现互相转换。

sub2ind函数

将矩阵中的指定袁术的行、列下标转换成存储的序号:调用格式为:

sub2ind函数举例:

上图中,首先创建了一个矩阵A,一个5行5列矩阵,size(A)为获得A矩阵的行数和列数,sub2ind第二和第三个参数都是用矩阵表示的,两个矩阵对应的元素代表A中某个元素的行下标和列下标。
行下标为1,列下标为4的元素对应的是0.1419,对应的序号为16。
行下标为2,列下标为5的元素对应的是0.0357,对应的序号为22。
行下标为3,列下标为1的元素对应的是0.1270,对应的序号为3。
即我们输入的坐标(1,4),(2,5),(3,1)在矩阵A中的索引号,意思是A矩阵第1行第4个元素的索引值号为16,为什么是16呢?因为MATLAB是按列搜索的,先搜索第一列,然后搜索第二列…。同理A中的第2行第5个的索引号为22,后面依次类推。
那如何取出A中(1,4),(2,5),(3,1),输入一下代码即可:

ind2sub函数

将把矩阵元素的序号转换成对应的下表,其调用格式为:

ind2sub和sub2ind这对函数,是互逆的一对函数。ind2sub把数组或者矩阵的线性索引转化为相应的下标;sub2ind则正好相反,将下标转化为线性索引。

ind2sub函数举例:

上图中,首先创建了一个矩阵A,一个5行5列矩阵,size(A)为获得A矩阵的行数和列数,ind2sub第二个参数是用矩阵表示的,矩阵对应的元素代表A中索引值。
索引值为1,元素对应的是0.2760,对应的坐标为(1,1)。
索引值为7,元素对应的是0.9597,对应的坐标为(2,2)。
索引值为18,元素对应的是0.1986,对应的坐标为(3,4)。
那如何取出A中(1,1),(2,2),(3,4),输入一下代码即可:

利用冒号表达式获得子矩阵

子矩阵是指矩阵中的一部分元素构成的矩阵。

image.png

end 运算符

表示某一维的末尾元素小标。

利用空矩阵删除矩阵的元素

空矩阵是指没有任何元素的矩阵。

x就是一个空矩阵。

reshape函数

如果需要改变矩阵的形状,reshape(A,m,n)表示矩阵总元素保持不变的前提下,将矩阵A重新排列为m*n的矩阵。

reshape只改变矩阵的行数和列数,但并不改变原矩阵元素个数及其存储顺序。

A( : )

将矩阵A的每一列元素堆叠起来,成为一个列向量。

A( : )等价于reshape(A,6,1)。

更多回帖

发帖
×
20
完善资料,
赚取积分