矩阵下标操作
【MATLAB技术】矩阵下标操作
在MATLAB里面,对于一个二维矩阵,比如A=magic(3),有两种访问矩阵A元素的方法。
1、可以通过A(i,j)来访问A矩阵的第i行,第j列的元素(i,j=1,2,3,4)。我们称(i,j)这种下标为subscript。
2、通过通过A(p)来访问A的第p个元素。那什么是A的第p个元素呢?这就要说到MATLAB中矩阵在内存中的存在方式了。
比如矩阵 AA=magic(3)
A =
8 1 6
3 5 7
4 9 2
在内存中的顺序实际上是8,3,4,1,5,9,6,7,2.
所以,A(p)就是上面这列数中的第p个元素,一般称这种(p)的访问方式为index。
3、index与subscript的关系
通过一个例子,比如A(3,2)=A(6)=9,这里的(3,2)与6有什么关系呢?通过2,很明显,矩阵在内存中是按列存放的,A(3,2)表示的是第2列的第3个元素。那么index=第2列之前所有的元素+行的位置。即6=(2-1)*3+3。这里的第一个3表示A矩阵的行数,第二个3表示A(3,2)这个元素所在的行。
推而广之,对于A=rand(m,n)这种矩阵。A(i,j)对于的A(index),index=(j-1)*m+i.
4、MATLAB提供的index与subscript相互转化的函数
(1)sub2ind;
(2)ind2sub;
这两个函数的功能同3,用法更加简单,功能也更强大。
5、说了这么多,既然可以通过subscript访问矩阵,为什么还要提index呢?
请看下面问题。
Qusestion:对于矩阵A,还是A=magic(3)
A =
8 1 6
3 5 7
4 9 2
现在,我们想让A(1,1)和A(2,3),A(3,3)这三个元素的值变为0。改如何操作?
(1)可能有人想到下面的办法A([1,2,3],[1,3,3])=0;操作后发现
A =
0 1 0
0 5 0
0 9 0
实际上这句命令的意思是让A的第1,2,3行的1,3列元素置为0。这与我们想要的操作是不一致的。
(2)方法二:一个一个的设置。当然,这是可以的,但不够简便。那有没有直接的方法?
(3)如果我们先把(1,3),(2,3),(3,3)这三个subscript转变为index,再让A(index)=0不就可以了吗?
看下面命令的执行效果 A(sub2ind(size(A),[1 2 3],[2,3,3]))=0
A =
8 0 6
3 5 0
4 9 0
6、本次说明了矩阵元素的两种下标访问方法,重点在于灵活应用,希望对大家编程序有用。
7、更为详细的说明大家可以看帮助文件。(MATLAB2012A的位置如下)
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步