Matlab快速入门之索引位置

文章目录(展开/隐藏→)

展开
4
(1)

Matlab中,有一个词,称之为索引。我们可以理解为索引表示某元素在数组或矩阵中的具体位置,即,有了索引,我们就可以直接找到对应的元素。本文,我们会给出Matlab中的下标、冒号运算符、串联、删除行和列、标量扩展、逻辑下标以及很好用的find函数。

Matlab快速入门之索引位置

下标

A的行i和列j中的元素通过A(i,j)表示。例如,A(4,2)表示第四行和第二列中的数字。这里,我们以幻方矩阵为例子,A(4,2)14。因此,要计算A第四列中的元素的总和,请键入:

>> A=magic(4)

A =

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

>> A(1,4) + A(2,4) + A(3,4) + A(4,4)

ans =

    34

但这不是计算某列总和的最佳方法。

此外,还可以使用单一下标A(k)引用矩阵的元素。单一下标是引用行和列向量的常见方法。但是,也可以对满二维矩阵应用单一下标。在这种情况下,数组被视为一个由原始矩阵的列构成的长列向量。因此,在幻方矩阵中,A(8)是另一种引用存储在A(4,2)中的值14的方法:

>> A(8)

ans =

    14

>> A(2)

ans =

     5

>> A(4)

ans =

     4

如果尝试使用矩阵外部元素的值,则会生成错误:

>> t = A(4,5)
索引超出矩阵维度。

相反,如果将值存储在矩阵外部元素中,则会增大大小以便容纳新元素:

>> X = A;
>> X(4,5) = 17

X =

    16     2     3    13     0
     5    11    10     8     0
     9     7     6    12     0
     4    14    15     1    17

冒号运算符

冒号:是最重要的MATLAB®运算符之一。它以多种不同形式出现。表达式1:10表示包含从1到10之间的整数的行向量

>> 1:10

ans =

     1     2     3     4     5     6     7     8     9    10

要获取非单位间距,请指定增量。例如,

>> 100:-7:50

ans =

   100    93    86    79    72    65    58    51

>> 0:pi/4:pi

ans =

         0    0.7854    1.5708    2.3562    3.1416

包含冒号的下标表达式引用部分矩阵:A(1:k,j),表示A 第j列中的前k个元素。因此,

>> sum(A(1:4,4))

ans =

    34

计算第四列的总和。但是,执行此计算有一种更好的方法。冒号本身引用矩阵行或列中的所有元素,而关键字end引用最后一个行或列。因此,计算A最后一列中的元素的总和:

>> sum(A(:,end))

ans =

    34

为什么4×4幻方矩阵的幻数和等于34?如果将介于1 到16之间的整数分为四个总和相等的组,该总和必须为

>> sum(1:16)/4

ans =

    34

串联

串联是连接小矩阵以便形成更大矩阵的过程。实际上,第一个矩阵是通过将其各个元素串联起来而构成的。成对的方括号[]即为串联运算符。例如,从4×4幻方矩阵A开始,组成一个新的矩阵:结果会生成一个8×8矩阵,这是通过连接四个子矩阵获得的:

>> B = [A  A+32; A+48  A+16]

B =

    16     2     3    13    48    34    35    45
     5    11    10     8    37    43    42    40
     9     7     6    12    41    39    38    44
     4    14    15     1    36    46    47    33
    64    50    51    61    32    18    19    29
    53    59    58    56    21    27    26    24
    57    55    54    60    25    23    22    28
    52    62    63    49    20    30    31    17

此矩阵是一个接近于幻方矩阵的矩阵。此矩阵的元素是经过重新排列的整数1:64。此矩阵的列总和符合8×8幻方矩阵的要求:

>> sum(B)

ans =

   260   260   260   260   260   260   260   260
Matlab快速入门之索引位置

但是其行总和sum(B')'并不完全相同。要使其成为有效的8×8幻方矩阵,需要进行进一步操作。

删除行和列

只需使用一对方括号即可从矩阵中删除行和列。首先

X = A;

然后,要删除X的第二列,请使用

>> X(:,2) = []

X =

    16     3    13
     5    10     8
     9     6    12
     4    15     1

如果您删除矩阵中的单个元素,结果将不再是矩阵。因此,以下类似表达式会报错:

>> X(1,2) = []
空赋值只能具有一个非冒号索引。

但是,使用单一下标可以删除一个元素或元素序列,并将其余元素重构为一个行向量。因此

>> X(2:2:10) = []

X =

    16     9     3     6    13    12     1

上述可以理解为删除2,4,6,8,10对应位置上的元素,当不指定行和列时,将按列开始计数,直到最后一列。

标量扩展

可以采用多种不同方法将矩阵和标量合并在一起。例如,通过从每个元素中减去标量而将其从矩阵中减去。幻方矩阵的元素平均值为8.5,因此

>> B = A - 8.5

B =

    7.5000   -6.5000   -5.5000    4.5000
   -3.5000    2.5000    1.5000   -0.5000
    0.5000   -1.5000   -2.5000    3.5000
   -4.5000    5.5000    6.5000   -7.5000

>> sum(B)

ans =

     0     0     0     0

通过标量扩展,MATLAB会为范围中的所有索引分配一个指定标量。例如,将B的某个部分清零:

>> B(1:2,2:3) = 0

B =

    7.5000         0         0    4.5000
   -3.5000         0         0   -0.5000
    0.5000   -1.5000   -2.5000    3.5000
   -4.5000    5.5000    6.5000   -7.5000

逻辑下标

根据逻辑和关系运算创建的逻辑向量可用于引用子数组。假定X是一个普通矩阵,L是一个由某个逻辑运算生成的同等大小的矩阵。那么,X(L)指定X的元素,其中L的元素为非零。

通过将逻辑运算指定为下标表达式,可以在一个步骤中完成这种下标。假定您具有以下数据集:

x = [2.1 1.7 1.6 1.5 NaN 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8];

NaN是用于缺少的观测值的标记,例如,无法响应问卷中的某个项。要使用逻辑索引删除缺少的数据,请使用isfinite(x),对于所有有限数值,该函数为true;对于NaNInf,该函数为false:并自动去除。

>> x = x(isfinite(x))

x =

  1 至 12 列

    2.1000    1.7000    1.6000    1.5000    1.9000    1.8000    1.5000    5.1000    1.8000    1.4000    2.2000    1.6000

  13 列

    1.8000
Matlab快速入门之索引位置

现在,存在一个似乎与其他项很不一样的观测值,即5.1。这是一个离群值。下面的语句可删除离群值,在本示例中,即比均值大三倍标准差的元素:

>> x = x(abs(x-mean(x)) <= 3*std(x))

x =

    2.1000    1.7000    1.6000    1.5000    1.9000    1.8000    1.5000    1.8000    1.4000    2.2000    1.6000    1.8000

标量扩展对于另一示例,请使用逻辑索引和标量扩展将非质数设置为0,以便高亮显示丢勒幻方矩阵中的质数的位置。(请参阅magic函数。)

>> A(~isprime(A)) = 0

A =

     0     2     3    13
     5    11     0     0
     0     7     0     0
     0     0     0     0

find 函数

find函数可用于确定与指定逻辑条件相符的数组元素的索引。find以最简单的形式返回索引的列向量。转置该向量以便获取索引的行向量。例如,再次从丢勒的幻方矩阵开始。(请参阅magic函数。),使用一维索引选取幻方矩阵中的质数的位置:

>> k = find(isprime(A))'

k =

     2     5     6     7     9    13

使用以下命令按k确定的顺序将这些质数显示为行向量

>> A(k)

ans =

     5     2    11     7     3    13

k用作赋值语句的左侧索引时,会保留矩阵结构:

>> A=magic(4)

A =

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

>> k = find(isprime(A))'

k =

     2     5     6     7     9    13

共计1人评分,平均4

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

转载文章,原文出处:MathWorks官网,由古哥整理发布

如若转载,请注明出处:https://iymark.com/program/matlab/indexing.html

(0)
上一篇 2022年09月15日 23:00
下一篇 2022年09月17日 19:10

相关推荐

  • Matlab三维离散序列数据绘图函数stem3

    文章目录(展开/隐藏→) 展开常见用法语法说明行向量输入列向量输入矩阵输入使用向量输入指定针状线条位置使用矩阵输入指定针状线条位置填充标记线型、标记符号和颜色选项其他样式选项特定坐…

    2020年12月13日
    061
  • Matlab快速入门之数组类型

    文章目录(展开/隐藏→) 展开多维数组元胞数组字符与文本结构体 4.3 (3) 本文讲解下Matlab中的数组类型,Matlab中数组类型大约有以下几种:多维数组、元胞数组、字符与…

    2022年09月18日
    089
  • Matlab使用曲线拟合工具箱拟合多项式曲线

    文章目录(展开/隐藏→) 展开加载和绘制数据创建并绘制二次曲线创建并绘制多项式曲线绘制残差以评估拟合检查超出数据范围的拟合绘制预测区间拟合优度检验比较系数和置信限以确定最佳拟合评估…

    2022年08月30日
    183
  • Matlab三维等高线图绘制函数contour3

    文章目录(展开/隐藏→) 展开常见用法语法说明球体的等高线五十个层级的等高线具有标签的特定层级的等高线一个层级的等高线自定义线宽 4 (3) 今天,给各位带来Matlab中绘制三维…

    2021年01月14日
    049
  • Matlab读取csv文件csvread函数的使用

    文章目录(展开/隐藏→) 展开Matlab帮助文件帮助文件解释实例演示 3.7 (3) 今天来说下如何使用Matlab读取excel的csv文件,这个有什么用呢?想必理科生大概率都…

    2020年09月14日
    0277
  • Matlab使用slice函数绘制三维体切片平面

    文章目录(展开/隐藏→) 展开常见用法语法说明沿切片的三维体数据沿曲面的三维体数据指定插值方法 4 (2) 终于迎来了这一刻,本文是Matlab绘制流线图系列函数分享文章的最后一篇…

    2021年03月14日
    0238

发表回复

登录后才能评论
本站APP