【MATLAB】索引(索引,冒号运算符,删除行和列)

索引

下标

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

A=magic(4)
B=A(:,[1 3 2 4])
A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

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

此外,还可以使用单一下标 A(k) 引用矩阵的元素。单一下标是引用行和列向量的常见方法。因此,在幻方矩阵中,A(8) 是另一种引用存储在 A(4,2) 中的值 15 的方法。

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

t = A(4,5)

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

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

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

冒号运算符

冒号 : 是最重要的 MATLAB® 运算符之一。它以多种不同形式出现。包含从 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 个元素

A=magic(4)
A(1:3,2)
A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
ans =
     2
    11
     7

计算第四列的总和:

A=magic(4);
sum(A(1:4,4))
ans =
    34

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

A=magic(4)
sum(A(:,end))
ans =
    34

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

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

结果会生成一个 8×8 矩阵,这是通过连接四个子矩阵获得的。

删除行和列

只需使用一对方括号即可从矩阵中删除行和列。删除 X 的第二列

A=magic(4)
X = A;
X(:,2) = []
A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
X =
    16     3    13
     5    10     8
     9     6    12
     4    15     1

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

X(1,2) = []

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

X(2:2:10) = []
X =
    16     9     2     7    13    12     1

标量扩展

可以采用多种不同方法将矩阵和标量合并在一起。
通过标量扩展,MATLAB 会为范围中的所有索引分配一个指定标量。例如,

B(1:2,2:3) = 0
将 B 的某个部分清零:
B =
      7.5        0        0      4.5
     -3.5        0        0     -0.5
      0.5     -2.5     -1.5      3.5
     -4.5      6.5      5.5     -7.5

find 函数

find 函数可用于确定与指定逻辑条件相符的数组元素的索引。find 以最简单的形式返回索引的列向量。转置该向量以便获取索引的行向量。例如,

A=magic(4)
B=A(:,[1 3 2 4])
k = find(isprime(B))'
使用一维索引选取幻方矩阵中的质数的位置:
A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
B =
    16     3     2    13
     5    10    11     8
     9     6     7    12
     4    15    14     1
k =
     2     5     9    10    11    13

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

A(k)
ans =
     5     3     2    11     7    13

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

A(k) = NaN
A =
    16   NaN   NaN   NaN
   NaN    10   NaN     8
     9     6   NaN    12
     4    15    14     1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我一直在流浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值