博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
矩阵下标操作
阅读量:6818 次
发布时间:2019-06-26

本文共 1185 字,大约阅读时间需要 3 分钟。

【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的位置如下)

转载于:https://www.cnblogs.com/wacc/p/3734150.html

你可能感兴趣的文章
换个姿势学数学:二次函数与拆弹部队
查看>>
React-事件机制杂记
查看>>
调用链系列四:调用链上下文传递
查看>>
简单基于spring的redis配置(单机和集群模式)
查看>>
读《疯狂Java:突破程序员基本功的16课》之数组与内存控制部分总结
查看>>
LeetCode 315. Count of Smaller Numbers After Self
查看>>
CNCF多元化奖学金系列:让微服务、Kubernetes和云原生连接
查看>>
微信小程序:实现悬浮返回和分享按钮
查看>>
从dist到es:发一个NPM库,我蜕了一层皮
查看>>
JS module的导出和导入
查看>>
Python实现二叉树相关算法
查看>>
Linux中用户管理
查看>>
CSS实用技巧干货
查看>>
APT案例之点击事件
查看>>
分布式系统的Raft算法
查看>>
爱可生开源社区官网正式发布啦!
查看>>
猫头鹰的深夜翻译:微服务概述
查看>>
Python易学就会(二)import的用法
查看>>
俄罗斯方块游戏——pyqt5
查看>>
每日技术阅读记(2019.01.26)
查看>>