基本矩阵操作(一)

@

矩阵和数组的概念和区别

  1. 矩阵:矩阵式数学上的概念,最早来自于方程组的系数及常数所构成的方针。作为一种变换或者映射算符的体现,矩阵运算有着明确而严格的数学规则。
  2. 数组:计算机程序设计领域的概念。在matlab中其存在目的是为了使数据管理方便,操作简单,命令形式自然,执行计算有效。
  3. 在matlab中,矩阵是以数组的形式存在的,一维数组相当于向量,二维数组相当于矩阵,所以矩阵式数组的子集。

矩阵的构造

  1. 直接赋值法构造简单矩阵

    简单矩阵采用矩阵构造符号——方括号[],同行的元素之间用,或者空格间隔,行与行之间用分号;

    例如:

    >> A=[1 2 3;4 5 6;7 8 9]
    
    A =
    
         1     2     3
         4     5     6
         7     8     9
    
    >> B=[1,2,3;4,5,6;7,8,9]
    
    B =
    
         1     2     3
         4     5     6
         7     8     9
    
    >> 
    
  2. 特殊矩阵

    特殊矩阵的构造一般都是用matlab特定的函数来实现。

    函数名称 函数功能
    ones(n) 构建一个n x n的1矩阵(矩阵的元素全部是1)
    ones(m,n,.. p) 构建一个m x n...p的1矩阵
    ones( size(A)) 构建一个和矩阵A同样大小的1矩阵
    zeros(n) 构建一个n x n的0矩阵(输出矩阵的元素全部是0)
    zeros(m, n,…, p) 构建一个m x n x..x p的0矩阵
    zeros(size(A)) 构建一个和矩阵A同样大小的0矩阵
    eye(n) 构建一个n x n的单位矩阵
    eye(m, n) 构建一个m x n的单位矩阵
    eye( size(A)) 构建一个和矩阵A同样大小的单位矩阵
    magic(n) 构建一个n x n的矩阵,其每一行、每一列的元素之和都相等
    rand(n) 构建一个n x n的矩阵,其元素为0-1之间均匀分布的随机数
    rand(m,n,… p) 构建一个m x n x..p的矩阵,其元素为0-1之间均匀分布的随机数
    randn (n) 构建一个n x n的矩阵,其元素为零均值、单位方差的正态分布随机数
    randn (m, n,. p) 构建一个m x n x..p的矩阵,其元素为零均值、单位方差的正态分布随机数
    diag(c2) 构建一个n维的方阵,它的主对角线元素值取自向量x,其余元素的值都为0
    diag(A, k) 构建一个由矩阵A第k条对角线的元素组成的列向量k=0为主对角线; k<0为下第k条对角线; k>0为上第k条对角线
    diag(x, k) 构建一个(n+|k|) x (n+|k|)维的矩阵,该矩阵的第k条对角线元素取自向量x,其余元素都为0(关于参数k,参考上个命令)
    triu(A) 构建一个和A大小相同的上三角矩阵,该矩阵的主对角线上元素为A中相应元素,其余元素都为0
    triu(A, k) 构建一个和A大小相同的上三角矩阵,该矩阵的第k条对角线及其以上元素为A中相应元素,其余元素都为0
    tril (A) 构建一个和A大小相同的下三角矩阵,该矩阵的主对角线上元素为A中相应元素,其余元素都为0
    tril(A, k) 构建一个和A大小相同的下三角矩阵,该矩阵的第k条对角线上及其以下元素为A中相应元素,其余元素都为0

    样例:

    >> magic(5)
    
    ans =
    
        17    24     1     8    15
        23     5     7    14    16
         4     6    13    20    22
        10    12    19    21     3
        11    18    25     2     9
    
    >> 
    
  3. 向量、标量和空矩阵

    向量:单行或单列的矩阵称为向量。

    标量:1 x 1的矩阵称为标量,矩阵只有一个元素

    空矩阵:行和列数至少有一个为0的矩阵。

    • 空矩阵的表示:

      x=[]
      

    空矩阵和0矩阵的区别:空矩阵内没有任何元素不占用存储空间。而0矩阵表示该矩阵中所有的元素全部为0,需要存储空间。

矩阵大小及结构的改变

矩阵大小及结构的改变一般也是由函数来实现。

函数名称 函数功能
fliplr(A) 矩阵每一行均进行逆序排列
flipud(A) 矩阵每一列均进行逆序排列
flipdim(A, dim) 生成一个在dim维矩阵A内的元素交换位置的多维矩阵
rot90(A) 生成一个由矩阵A逆时针旋转90度而得到的新矩阵
ro190(A,k) 生成一个由矩阵A逆时针旋转k×90.而得到的新矩阵
reshape(A, m, n) 生成一个m x n x p维的矩阵,其元素以线性索引的顺序从矩阵A中取得如果矩阵A中没有mXnx.p个元素,将返回一个错误信息
repmat(A. [m n...p]) 创建一个和矩阵A有相同元素的mXnx.Xp块的多维矩阵
shiftdim(A, n) 矩阵的列移动n步。n为正数,矩阵向左移; n为负数,矩阵向右移
squeeze(A) 返回没有空维的矩阵A
cat(dim,A, B) 将矩阵A和B组合成一个dim维的多维矩阵
permute(A, order) 根据向量order来改变矩阵A中的维数顺序
ipermute(A, order) 进行命令permute的逆变换
sort(A) 对一维或二维矩阵进行升序排序,并返回排序后的矩阵;当A为二维矩阵时,对矩阵的每一列分别进行排序
sort(A, dim) 对矩阵按指定的方向进行升序排序,并返回排序后的矩阵.当dim=1时,对矩阵的每一列排序dim=2时,对矩阵的每一行排序
sort(A, dim, mode) mode为'ascend'时,进行升序排序; mode为'descend'时,进行降序排序
[B, LX]=sort(A,...) LX为排序后备元素在原矩阵中的行位置或列位置的索引

矩阵下标引用

  在matlab中二维数组的数字索引分为双下标索引和单下标索引。双下标比较简单就类似于坐标的形式,而单下表索引需要注意。但下表索引的方式式采用列优先的方式对矩阵元素进行编号。如下图中4x4矩阵的编号:

1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
  1. 矩阵下标访问单个矩阵元素

    常用的矩阵索引表达式:

    索引表达式 函数功能
    A(1) 将二维矩阵A重组为一维数组,返回数组中第一个元素
    A(:,j) 返回二维矩阵A中第j列列向量
    A(i,:) 返回二维矩阵A中第i行行向量
    A(:,j:k) 返回由二维矩阵A中的第j列到第k列列向量组成的子矩阵
    A(i:k,:) 返回由二维矩阵A中的第i行到第k行行向量组成的子矩阵
    A(i:k,j:l) 返回由二维矩阵A中的第i行到第k行行向量和第j列到第l列列向量的交集组成的子矩阵
    A(: ) 将矩阵A中的每列合并成一个长的列向量
    A(j:k) 返回一个行向量,其元素为A(:)中的第j个元素到第k个元素
    A([j1 j2 ...]) 返回一个行向量,其元素为A(:)中的第j1、j2元素
    A(:,[j1 j2 ...]) 返回矩阵A的第j1列、第j2列等的列向量
    A([i1 i2 ...],: ) 返回矩阵A的第i1行、第i2行等的行向量
    A([i1 i2 ...],[j1 j2 ...]) 返回矩阵第1行、第2行等和第j列、第2列等的元素
  2. 线性引用元素

    • 双下标索引转化为单下标索引

      IND=sub2ind(siz,i,j)
      

      其中siz是包含两个元素的数组,代表了矩阵的行数和列数,一般可以直接用size(A)表示,i与j分别是双索引下标元素的行数和列数,IND是转换后的单索引下标值。

    • 单索引下标转化为双索引下标

      [I J]=ind2sub(siz,ind)
      

      变量意义同上。

  3. 访问多个矩阵元素

    sum(A(1:4,4))							%求第4列前四个元素的和
    sum(A(:,4))								%求第4列所有元素的和
    sum(A(:,end))							%求矩阵最后一列元素的和
    B=A(1:3:10)								%
    
posted @   布拉多1024  阅读(378)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示